"tamperproof cookie "の作り方
5311 ワード
オーライ!それは分でした!タンパプルーフクッキー、私は1つを必要とし、それはそれを介して考えた後、それはかなり簡単です.
私は、それが常に私の最後のポスト以来しばらくあったと常に言います.
問題
ユーザーを示す手段として安全に使用できる何かの格納されたクライアント側はOTP ユーザID、電子メールアドレス、または同様のものを通して、ユーザに何らかのユニークな属性を持たなければなりません 物事の妥当性をチェックするとき、考慮される有効期限があるべきです ユーザー情報または有効期限が変更された場合に首尾よく検証してはいけません 解決策
クッキーの値を2つの部分に分割しようとすると 分割の最初の要素を日付として解析し、失敗した場合にfalseを返します 解析された日付が現在のdatetimeの後にあることを確認してください 検証する マッチしなければfalseを返す を返します. 上記の擬似コードはまた、ユーザーが自分のパスワードを変更した場合、追加の利点を持って、彼らはすぐにOTPクッキーのチェックを失敗します.これはいくつかの方法で物事を少し安全になります.
ここでは、HMAC(といくつかのユニットテスト)の迅速な実行を介して偽
これは 塩は、必ずしも秘密ではありませんが、エンドユーザーには知られていません.したがって、彼らは 私たちは リソース Digital Signatures HMAC One Way Function replit Coding blocks slack 写真でnate_dumlao on Unsplash .
私は、それが常に私の最後のポスト以来しばらくあったと常に言います.
問題
フリーランスクライアントのためのマルチファクタ認証のセットアップに取り組んでいます.マルチファクターワンタイムパスワードをすべての設定がありますが、今私は“30日間”機能を覚えて私を実装する方法が必要です.それは比較的単純であるべきですか?クッキーは使えませんか.
それほど速くそこまでそれを考える前に、私を過ぎていない!クッキーはクライアントのローカルストレージに保存されているので、クライアントによって簡単に変更できますdigital signature !
以下に状況について説明します.
基本的に、私は、ユーザーが30日間認証されたデュアルファクタを示していることを示す安全な(タンパー証明)手段にローカルに保管する方法を必要としました.これを行う最も簡単な方法は、有効期限とユーザ名の値でクッキーを保存することです.しかし、この最初のアイディアは、ユーザーがクッキーの値(有効期限とユーザ名)を変更することができて、2番目の要因を過ぎてしまうことができるので、すぐにばらばらになりました.第2のファクターワンタイムパスワード(OTP)エントリーは、クッキーが有効であるならば、ユーザーに提示されなければなりません、特定のユーザーのために、そして、まだ期限が切れない(クッキー作成からの30日).
要件の概要
クライアント側のソリューションに必要ないくつかのことがあります.
クライアント側のソリューションに必要ないくつかのことがあります.
ユーザーを示す手段として安全に使用できる何かの格納されたクライアント側はOTP
解決策
上記の要件を上記のスクリーンショットに関連づけると、ある種の暗号がクライアント側に保存されているもののタンパープルーフ部分を保証するために使用される可能性があります.
HMAC - ハッシュベースメッセージ認証コードは、「キー」と「メッセージ」を利用する暗号化操作です.一般的なHMAC署名は以下のようになります.
digest = hmac(key, message)
The key
部分は、1つ以上の党の間の秘密です-私のケース1つの党とmessage
を検証するデータです.私の場合はkey
としてユーザーから秘密にされますkey
何が真実かmessage
クッキーに入れたものです.
何が良いkey
あなた自身を尋ねるかもしれない使用するには?まあ、それは似たようなものだが、それはユーザー名ではない.ユーザーは既に自分のユーザ名を知っているので、Akey
. しかし、パスワード、特にパスワードハッシュがあります.ユーザはリモートシステムに格納されているパスワードのハッシュを知らないので、Akey
.
ユーザのパスワードは基本的に以下のように計算されます:
password_digest = H(salt||plaintext_password, work_factor)
どこpassword_digest
の出力はsalt
連結するplaintext_password
Aを通じてone way function H
, work_factor
回.The password_digest
は、ユーザーが知っている何かではなく、彼らの塩は、各パスワードの変更を変更すると、また、彼らはplaintext_password
.
だから、今我々はkey
候補者、実際のメッセージはどうですか?メッセージは非常に簡単です、そして、我々はOTPクッキー有効期限のdatetimeを使うことができます.完全なHMACコールは以下のようになります.cookie_hash_content = hmac(H(password_hash), expiration_date_string)
.
この全体cookie_hash_content
保存する必要がありますが、クッキーの本体に保存することができますexpiration_date_string
同様に、サーバー側が入力を再構築することができますhmac
呼び出し、それらが一致するかどうかを確認します.
ありがたいことに、これはクッキー内のフィールドのパイプ(または他の)区切られたセットで十分に簡単です.このフォーマットを使います.
{expiration_date_string}|{cookie_hash_content}
認証時の上記クッキーの検証は以下のように簡単です.
digest = hmac(key, message)
password_digest = H(salt||plaintext_password, work_factor)
{expiration_date_string}|{cookie_hash_content}
cookie_hash_content
分割のクッキーの第2の部分を比較することによって、新しく生成されるhmac(H(password_hash), expiration_date_string)
ここでは、HMAC(といくつかのユニットテスト)の迅速な実行を介して偽
expireDates
and passwordHashes
: https://replit.com/@Kritner/TamperProofCookies#main.py 最後の思考
key
エンドユーザーに知られていないkey
利用されるcookie_hash_content
クッキー自体に格納された値に基づいて値を再計算することによってkey
それはクッキーにありません、そして、ユーザーによって知られていることができないので、ユーザーが確認ステップを通過することができた「正しい情報」を考え出す機会がありません.Reference
この問題について("tamperproof cookie "の作り方), 我々は、より多くの情報をここで見つけました https://dev.to/kritner/how-to-build-a-tamperproof-cookie-3bj6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol