2013-04-12 3 views
12

私は、TOTP/HOTPに基づいて二要素認証システムを構築しています。 otpを確認するには、サーバーとotpデバイスの両方が共有秘密を知っていなければなりません。サーバー上でHOTP/TOTPシークレットを暗号化またはハッシュすることは可能ですか?

HOTPシークレットはユーザーのパスワードと非常によく似ているため、同様のベストプラクティスを適用することが前提です。具体的には、暗号化されていないパスワードを保存しないでください。パスワードのハッシュ化されたハッシュだけを保存してください。

HOTP/TOTPのRFCもPython実装もこの側面をカバーしていないようです。

OTP共有秘密の一方向暗号化を使用する方法はありますか、それとも愚かな考えですか?

+0

秘密のハッシュを行う場合、効果的にハッシュ(秘密)が新しい秘密になります。 –

+0

はい、攻撃者がサーバーデータベースからハッシュ(シークレット)を読み取った場合、ハッシュはOTPを生成するのに十分ではないため、ユーザーを偽装することはできません。ハッシュされたパスワードのシナリオと同様に、サーバは、供給されたパスワードが正しいかどうかを知ることができますが、パスワードそのものについては知識がありません。 – Paul

答えて

7

OTP共有秘密の一方向暗号化を使用する方法はありますか。

実際はありません。リバーシブルな暗号化メカニズムを使用することもできますが、多分多くの点はありません。

ネットワーク上で完全なハッシュされていないHMACキーを送信することによってクライアントが認証された場合(通常はパスワードベースの認証の仕組みですが、リプレイ攻撃に対して脆弱です)、サーバー上でHMACキーをハッシュするだけです。まさにHOTP/TOTPが回避するように設計されています。

なぜ私たちはパスワード(塩+ハッシュ)を保存する前にパスワードに一方向関数を適用するのですか?

これは実際には良い質問です。

私は、UNIXオペレーティングシステムの初期のバージョンではすべてのパスワード情報を 'world-readable'の/etc/passwdファイルに保存していると考えているから、何らかの方法で難読化する必要があり、salt +彼らが選んだ方法だった。

最近では、パスワードファイルを自由に利用できるようにはなっていないため、おそらくハッシュする必要はありません。

しかし、パスワードが一般に人間によって選択されるため、難読化する別の理由があります。そのため、便宜上、複数のシステムで同じパスワードを選択することがよくあります。私は、HMAC鍵についても同じことは疑うが、これは暗号的に強力なメカニズムを使って(うまくいけば)選択されている。

現在、パスワードをハッシュする主な理由は、システムのセキュリティをあまり高めるものではなく、他のシステムのユーザーのセキュリティを損なう危険性を減らすためです。システムが侵害された場合。

攻撃者がシステムからプレーンテキストのパスワードを読み取ることができる場合は、攻撃者がシステム上の他のすべてを読み取る可能性があるため、おそらくあまり役​​に立ちません。

しかし、同じパスワードが別のシステムでも使用されている場合は、攻撃者にそのシステムを侵害する可能性があります。

人間が複数のシステムで同じパスワードを使用しないと信じられている人は、おそらくハッシュする必要はないでしょうが、それが起こる可能性が高いと想定するのはやや楽観的です。:-)

0

定義:HOTP(K,C) = Truncate(HMAC(K,C)) & 0x7FFFFFFF - Kは秘密鍵で、Cはカウンタです。 HMACが一方向ハッシュ(双方向暗号化ではない)であるため、ハッカーはHOTP文字列を持っている場合、ハッカーがKCを取得できないように設計されています。

K &は、OTPシステム全体を脅かすので、保護する必要があります。それは、Kが辞書にあり、我々がC(例えば、現在の時間)を知っているならば、HOTP/TOTPの辞書全体を生成して、Kを見つけることができます。

HOTP/TOTPに一方向の暗号化を適用すると(つまり、二重暗号化)、他の攻撃(例:キーストロークロギング)を防止したり、同じ暗号化を辞書に適用したりすることはありませんHOTP/TOTPのリスト。

簡単に記憶された同じパスワードのセットをあらゆるものに再利用することは人間の本性であり、このパスワードをデジタルデバイスやインターネットを介して送信する必要はありません。

Kのようなセキュリティの手順やプロトコルを実装することは重要ですが、誰でも机の中に置いておくか、K(HMACの場合)を持つサーバーは、ファイアウォールのいくつかの層。

+0

[ワンタイムパッド](http://en.wikipedia.org/wiki/One-time_pad) –

+0

良い例は、リンクスの設定ファイルがDES暗号化で保存されていることです。[解読](http ://gist.github.com/dwalters/2931407)、adminパスワードはHMAC文字列として保存されます。しかし、このHMACを回避するには、[弱点](http://superevr.com/blog/2013/dont-use-linksys-routers/)を使用してパスワードをハックします –

関連する問題