「40ビット暗号化キーのセカンドライフ」

コンビネーションロック しばらく前、職場で、認証プロトコルの設計と実装を処理する必要がありました。 この作業の副作用はプロトコルでした。簡潔にするために、MAUTと呼びましょう。これは、秘密鍵を取得できないキー長が40ビットしかない対称暗号化を使用します。 今日は彼についてです...



なんで?



MAuthは、1992年にStephen BellowinとMichael Merrittによって提案されたEKEファミリーのプロトコルの開発です。 このような「セキュリティ」プロトコルに対する批判を防ぐために、私はすぐに、MAuthの範囲が送信時にのみ関連する情報の送信に限定されることを予約します。 いずれかの当事者による送信の瞬間から時間Tの間に数学的に表現されます。



このプロトコルによって正常に解決されるタスクの例は、オブジェクトをリモートで制御するときの接続保護です。 ここでは、秘密鍵と信頼できるクライアント認証システムを知らずに管理できないことを保証する必要があります。 オブジェクト管理コマンドは秘密ではなく、その技術文書に記載されています。



どうやって?



安全なプロトコルの説明には、 次の表記法を使用します。 MAuthハンドシェイクモードには、わずか3つの手順が含まれます。

I. C-> S:C

II。 S-> C:{Ns} Kcs

III。 C-> S:{K'cs} Kcs

CとSは、それぞれクライアントと認証サーバーの識別子です。

Ns-サーバーによって生成された擬似乱数。

Kcs-クライアントとサーバーが知っている秘密鍵。

K'cs-セッションキー、K'cs = H(Kcs + Ns)。 ここで、Hは暗号化ハッシュ関数です。



送信モードでは、すべてのメッセージはセッションキーで暗号化されます。セッションキーの長さは、秘密の1-40ビットと同じです。 これがMAuthのボトルネックです。



攻撃者は、クライアントがサーバーに送信する最初のコマンドを知っていると仮定します。 この場合、ブルートフォースを使用して、時間Tのセッションキーを取得できます。脆弱性がまだ見つかっていない最新の対称暗号化アルゴリズム( Blowfishな​​ど )を使用する場合、必要なすべての操作を完了するにはTの有効期限までに十分な時間的余裕があります接続を切断します。



このプロトコルは、受動的および能動的な攻撃のすべてのタイプに耐性があります。 リスニングは、クライアント識別子を取得する以外に攻撃者に何も与えません。 強力な擬似乱数ジェネレータを使用すると、Nsを推測できなくなります。 セッションキーをハッキングしても、乱数のハッシュ(Kcs + Ns)を取得することはできないため、Kcsを取得することはできません。



サーバーに障害が発生すると、メッセージの繰り返し再生が失敗します。 このため、擬似乱数はサーバーとこのクライアントとの通信の一部として一意でなければなりません。



メッセージの置換も切断につながります。 さらに、プロトコルの速度と単純さを高めるために、クライアントによるサーバーの相互認証はここでは意図的に省略されています。 攻撃者がサーバーになりすまそうとすると、ステップ4で間違ったセッションキーで暗号化された回答を受け取ったクライアントは、単に切断します。



ボーナス


ロシア連邦政府の政令957に従い、暗号化手段の開発に関する規則の条項1-dに従って、「暗号化(暗号化)手段に関連する特定の種類の活動に対するライセンス条項の承認について」、MAuthは商用アプリケーションで自由に使用できます。



さらに、対称暗号化を使用すると、第三者(認証機関)を排除する機会が得られます。 クライアントの登録時に5バイトの情報を安全に転送することは、かなり単純なタスクのようです(会議で、または電話で送信できます)。



Ivan RuchkinとDmitry Tilikに記事をレビューしてくれてありがとう。



2010年7月12日からUPD


MAuthプロトコルの説明の公開の1日後、NeverWalkAloner habrayuzerによってハッキングされました。 彼は、Kのセッションキーを時間Tでハッキングした後(攻撃者がメッセージのいずれかの内容を知っている場合)、徹底的な検索を使用して{K'cs} Kcsを手に入れて、Kcsの秘密キーも取得できることに気付きました。 その結果、セッションの開始後2T後、攻撃者は自由に制御オブジェクトの制御を取得します。



2010年12月10日からのUPD


治療方法は? ハンドシェイクモードを次のように変更します。

I. C-> S:C

II。 S-> C:{Ns} H(Kcs)

III。 C-> S:{H(Kcs-Ns)} H(Kcs)

ここで、Hは暗号化ハッシュ関数です(ハッシュサイズは40ビットです)。

後続のすべてのメッセージは、セッションキーK'cs = H(Kcs + Ns)で暗号化されます。



別のボーナスがボーナスに追加されます。Kcs秘密鍵の可変長です。



MAuthの改訂版の共著者: NeverWalkAloner



All Articles