(個人的にはFujiwara式と名付けたいです(笑))
このソフトのコアな部分の説明です。
●基本は秘密鍵暗号化方式
現在ネット上で主流な暗号化方式には2種類ありますがご存知でしょうか?秘密鍵暗号化方式と公開鍵暗号化方式です。
秘密鍵暗号化方式というのは、通信するお互いの人間しか知らない鍵をもとにメッセージの暗号化を行い、その鍵を用いて通信する方式です。
故に、その鍵が第3者に知られてしまうと、その知った人は暗号化されたメッセージを解読できることになります。この方式はアルゴリズムが簡素であるという長所を持っていますが、鍵の管理、相手への鍵の教え方という点が短所として考えられます。
もう一つ、公開鍵暗号化方式というものがあり、こちらはアルゴリズムは大変なことをしていますが(笑)、鍵を自分だけしか知らないという原則の下では最強の方式であると言えます(しかし、数学的【大きな素数同士の積の因数分解】な解決法が見つかればこの方式は意味が無くなりますが)。この方式は第3者(認証機関)による認証技術にも使われています。
このチャットは前者の秘密鍵暗号化方式を私が改良したものです。(アルゴリズム自体は全くのオリジナルです)
認証等はお互いが知っている秘密鍵で行いますが、通信自体はそのコネクションで生成した一時生成鍵によって行われます。
すなわち、秘密鍵は初期段階のみで使用し、後はその場でしか有効でない動的生成鍵によって暗号化されることになります。また、このバージョンでは動的生成鍵が2つ、秘密鍵が2つになりますので、4重のプロテクトをかけている事になります。この方式により暗号化されたメッセージを解読するには以下の条件が揃わなければなりません。(盗聴自体から守れるようなソフトではありませんが、とりあえず読めないという事です。)
●サーバ、クライアントの両者の秘密鍵を知っている
●動的生成鍵を2つとも算出できる
●コネクション発生時に発生するパケットを全てモニタリングできる
●鍵をもとに復号化を行うアルゴリズムを知っている
これら全ての条件を満たすことはまず無理でしょう。
ソフト上の「セキュリティ情報」の表示機能で、直前のメッセージの暗号化のイメージをつかむことが出来ますが、これを見ても誰も解読できないという事が分かると思います(^_^)また、動的生成鍵をなんらかの方法で発見できたとしても、その鍵は毎回変わるものなのでコネクションが切れると永遠に無効となり、無意味なものとなります。よって、ある意味ではかなり強力な方式であると思います。本当に一番強力なのは、この動的生成鍵を次回の秘密鍵として運用する方法なのですが、鍵の管理が頻雑になったりある条件下ではある特定のユーザと接続が全く出来なく恐れがあるため、今バージョンでの導入は見送っています。ちなみに私が大学2回生の時からあたためてきたアイデアです。
今もどんどんアルゴリズムを育ててより強力にしているので、さらなるパワーアップをご期待下さい。
少し詳しい解説
○ 秘密鍵暗号方式(DES方式)
お互いがデータの暗号化、復号化を行うキーを知っていて、そのキーを外部に漏らさないという前提のもとで使用する方式。XOR処理とビットの位置転換により暗号化を行う。
○ 公開鍵暗号方式(RSA方式)
大きな素数同士の掛け算では、その積から元の素数を求めるのは(今のところ)困難である。この事を利用し、秘密鍵と公開鍵の2つを作成し、公開鍵の方を一般に公開してそのキーで暗号化を行い、送られてきた暗号化データを秘密鍵で復号化するという方式である。公開鍵で暗号化はできても復号化することは不可能である。この場合、秘密鍵は本人しか知らないようにしなければならない。