現在、ほとんどのシステムは ID 認証ログインに静的パスワードを使用していますが、静的パスワードは盗まれやすいため、そのセキュリティはセキュリティ要件を満たすことができません。
動的パスワードはワンタイムパスワードを使用し、パスワードの盗難によるセキュリティ上の問題を防ぐために使用済みのパスワードを無効にします。
動的パスワードは、HOTP (イベント カウントに基づく動的パスワード、RFC4226)、TOTP (時間カウントに基づく動的パスワード、RFC6238)、OCRA (チャレンジ/レスポンス動的パスワード、RFC6287) およびその他の方式に分類されます。
この記事では、TOTP 方式を統合した動的パスワード認証のソリューションを紹介します。PHP フレームワークは Thinkphp3.2.3 を使用し、動的パスワード ジェネレーターは Google 認証を使用します。
1. Thinkphp フレームワークに oath アルゴリズム クラスを追加します
oath アルゴリズムのカプセル化クラス oath.php コードは次のとおりです:
Googleの動的パスワードアルゴリズムのシードキーはbase32エンコーディングを使用するため、base32.phpの内容は次のとおりです。
リーリー
2. データベースフィールドを追加します
次のフィールドをユーザーテーブルに追加します:
auth_type (0-静的パスワード、1-動的パスワード)
シード (シードキー)
temp_seed (一時シードキー)
last_logintime (最後に成功したログイン時間)
last_otp (最後に使用したパスワード)
このうち、auth_type はユーザーが使用する認証方法を示し、seed はユーザーのシード キー、temp_seed はユーザーが動的パスワード認証をアクティブ化する前に一時的に保存されたシード キーです。シードフィールドに記入します。 last_logintime と last_otp は、最後に成功した認証の時刻と動的パスワードであり、ユーザーが同じパスワードを再利用するのを防ぐために使用されます。
3. コードの統合
1)、動的パスワードを有効化します
元のシステムのパスワード変更ページに認証方法の選択を追加します。例:
ユーザーが動的パスワード方式を選択した場合、QR コードが生成され、ユーザーが動的パスワードをアクティブ化するためのページに表示されます。 Google認証に対応するため、QRコードの形式はGoogleと同じです。 QRコードの生成方法については、別記事「Thinkphp3.2.3でphpqrcodeを統合し、ロゴ付きQRコードを生成」を参照してください。
キーの QR コードを生成するコードは次のとおりです:
リーリー
2)、動的パスワードログイン
ユーザーの動的パスワードログイン検証のコード:データベースから auth_type、seed、last_otp フィールドを読み取ります。
4. テストと検証
Google認証をダウンロードし、静的パスワードを使用してシステムにログインし、パスワード変更ページに入ります。
Google 認証を開き、QR コードをスキャンすると、動的パスワードが表示されます。
コンテンツを保存し、動的パスワードを正常にアクティブ化します。
その後、強力な動的パスワードを使用してシステムにログインできるようになります!