2016-08-19 3 views
0

クライアント(Webアプリケーション内)が定義された時間だけアクセスできるように、有効期限のあるトークンを作成しようとしています。URLの時間照合のMD5を破る

私は(PATH + SECURETOKEN + TIME)とメッセージダイジェスト、実際には、私は、推測すると、前述のトークンは、ハッシュ関数(MD5)から作成されているのを見ましたhttps://www.keycdn.com/support/secure-token/

のようなものが欲しいですPATH + SECURETOKENは1つの変数、例えばSECURE_CODEにのみマージできます。

私は、サーバーで要求が行われたときにURLが解析され、トークンが復号化され、有効期限が確認されたと思われます。

最後に、私の質問は:?

は、私がSECURETOKENを持っていたら、それはハッシュを復号化することが可能で、ハッシュ= MD5(SECURETOKEN + TIME)を考えますかそうでない場合は、時間検証のトークンはどれくらい便利ですか?

ありがとうございます!

+0

私は実際にこの技術を2回、他の2つの異なるシステムで2回見ました。どのようにこれが可能であるかを理解したいと思います –

+0

[hmac](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)の使用を検討してください –

答えて

2

トークンを復号化して、正しいことを確認する必要はありません—同じ秘密鍵を使用してトークンを再計算し、結果のトークンが同一であることを確認するだけです。

実際に、このようなトークンを生成するには、HMACのようなメッセージ認証コードを使用することをお勧めします(内部的にハッシュを使用しますが、特定の攻撃に耐性があります)。シークレットトークンキーをHMACのキー入力として、トークンを使用して検証するデータ(この場合はパスと有効期限)をメッセージとして指定します。 ad hoc「連結およびハッシュ」構成は、KeyCDNによって使用されますが、この特定の目的にはおそらく問題ありませんが、広範なセキュリティ分析および冗長な安全機能がありません。は攻撃に対して脆弱です。検証コードが間違ってフォーマットされた有効期限のタイムスタンプを誤って受け取った場合。

また、新しいシステムでは、MD5以外のハッシュ関数を使用する必要があります。 MD5は、HMAC(または非可逆性と衝突耐性のみを必要とする他のアプリケーション)で使用されても安全であると考えられていますが、他の目的では完全に安全でないことが知られています。より安全で新しいSHA-2やSHA-3などのハッシュ関数がより安全な選択肢になります。

+0

しかし、SECRETKEY = SECRETTOKEN + TIMEと時間はクライアントの時間から得られます。サーバー側では、私はSECRETTOKENと(SECRETTOKEN + TIME)のハッシュだけを持っていますか? –

+0

リンクしたKeyCDNサンプルコードが実際にトークンを計算する方法を見てください。例えばPHPの例では '$ md5 = md5($ path。$ secret。$ expire、true);'( '$ md5'はtokenを得るためにbase64urlでエンコードされています)。トークンを検証するとき、サーバーは '$ path'と' $ expire'(URLにあるので)と '$ secret'(CDN設定に入力したので)を知っているので、トークンそのパスと有効期限*は、それが同じ秘密を使って生成された場合には、*なるべきです。ここでの秘密は任意の*定数*文字列であることに注意してください。それは失効時間に依存しません。 –

+0

ああ!男、これは愚かな質問だった...ごめんなさい。最後のパラメタがなければ、$ expireはメッセージの一部を回復することはできません。 –

関連する問題