[P2P][DHT]サーバレスなP2P認証方法の提案
□はじめに
先日はゼロ知識証明を応用した認証方法を提案した。
このエントリーには色々とコメントを頂きその後改良を加えた。しかし以下の2つが欠点でとして残っている。
[欠点1]中間侵入攻撃を許す。
[欠点2]ノードIDをそのノードが保有していることを完全には証明できない。
そこで上記2点を改良した方法を提案する。今回の基本的アイデアはある条件化で自己証明書を作る事である。
□ノードが事前に実施すべきアルゴリズム
これから各ノードが事前に実施すべきアルゴリズム案を書いておく。
[手順1]ノード1は大きな素数a1,b1を選び、c1=a1×b1を計算する。nodeID1=hash(c)とする。ただしhash()はハッシュ関数。nodeID1はノードIDに相当する。
[手順2]ノード1はc1を利用してRSA暗号アルゴリズムから公開鍵e1と秘密鍵d1のペアを生成する。
[手順3]ノード1はpublicinfo1=(nodeID1,c1,e1,sgn1)を公開する。この際、sgn1はhash(node1,e1)をd1で暗号化したもの、つまり自己証明書相当のものを意味する。
□ノードの認証
次にノード2がノード1を認証するアルゴリズムを書く。ノード2はpublicinfo2(nodeID2,c2,e2,sgn2)を公開している。
[手順1]ノード2はDHTを使ってノード1のpublicinfo1を入手する。
[手順2]ノード2はnodeID1,c1よりc1を検証し且つnodeID1,c1,e1,sgn1を使ってpublicinfo1を検証する。
[手順3]ノード1はc1,d1を使い、ノード2はc1,e1を使ってRSA暗号通信を開始する。
[手順4]上位RSA暗号通信はプロトコルが決まっており、随時「暗号通信路内」でノード2からノード1へのチャレンジレスポンス、ノード1からノード2へのチャレンジレスポンスを実施する。なおノード1がノード2にチャレンジレスポンスをする際には(c2,e2)を利用する。これでノード1とノード2が相互認証されたことになる。
□制約条件
今回のアルゴリズムが有効なのは各cの素因数分解が複数ユーザが知らない事が前提である。
ユーザ3がcを作成したときに、たまたまユーザ1が既にcを保有した場合には、ユーザ3はユーザ1の成りすましが可能である。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント