web-dev-qa-db-ja.com

ローカルスマートカード認証

PKCS#11または他の同様のインターフェイスを備えたスマートカードを使用しており、証明書と秘密キーが含まれています。

PINで保護されたスマートカードとその上のデータを使用して、ユーザーのローカル(ネットワークなし)認証を行いたいのですが。

それを行い、それを信頼するための良いスキーム/アルゴリズムは何ですか?

私の最初のアイデアは次のことをすることです:

  1. ユーザー名/ PINを入力してください
  2. ユーザーとしてスマートカードにログインします(失敗した場合はfalseを返します)
  3. 証明書の有効性を確認します(有効でない場合はfalseを返します)
  4. ユーザー名が証明書のCNと等しいかどうかを確認します(そうでない場合はfalseを返します)
  5. ランダムデータを生成し、スマートカードの秘密キーを使用して署名する
  6. 署名が有効かどうかを確認します(有効でない場合はfalseを返します)
  7. 真を返す

それは理にかなっていますか?またはこれに関する基準はありますか?

3
user1563721

次の変更を提案します

  1. ユーザー名/ PINを入力してください
  2. ユーザーとしてスマートカードにログインします(失敗した場合はfalseを返します)

通常、デジタル証明書付きのスマートカードには「ユーザー名」がありません。選択した証明書の秘密鍵のロックを解除するために必要なピン

  1. 証明書の有効性を確認します(有効でない場合はfalseを返します)

正解です。これは、使用可能な証明書をフィルタリングするために必要です。あなたはいくつか持つことができます(これがあなたのシナリオであるかどうかはわかりません)

  1. ユーザー名が証明書のCNと等しいかどうかを確認します(そうでない場合はfalseを返します)ユーザーが選択する証明書は何もないため、通常、この手順はデジタル署名の後に行われます。

また、ユーザーがログに記録され、CNにユーザー名が含まれていると想定しています。スマートカードを使用してプロセスを認証する場合、通常は逆です。ユーザーが証明書を選択し、ユーザー名が証明書属性(CN、SERIALNUMBERまたはカスタムの属性)から抽出されます。

  1. ランダムデータを生成し、スマートカードの秘密キーを使用して署名する
  2. 署名が有効かどうかを確認します(有効でない場合はfalseを返します)
  1. 使用済み証明書の失効を確認する
  2. 証明書からユーザー名を抽出し、承認されているかどうかを確認します
  1. 真を返す
0
pedrofb

これはかなり理論的な質問であり、プラットフォームを指定しなかったためです-Windows/Linux/MacおよびインフラストラクチャAD /スタンドアロン/ワークグループ。ロールアウトスキーム/要件など。また、ネットワークインフラストラクチャがないため、証明機関を実行して証明書を発行することはできません。

あなたのアプローチを簡素化するための私の提案:

  1. PKCS#11機能を使用してカスタムデータを作成します。
  2. カードにUserLogin/Password/WorkstationNameを保存するための複雑なデータ形式
  3. 許可されたカードのリストにスマートカードのシリアル番号を保存します。

認証するため:

  1. ユーザーはカードを挿入してPINを入力します。 PINを確認します。カードにログインします。
  2. PKCS#11からのリーダーデータ。
  3. ユーザー名/ワークステーション名/カードシリアルに問題がないかどうかを確認してください-これがファクター2認証になります
  4. ユーザー名/パスワード(カードから)をローカルシステム認証システムに渡す(Windows/Mac/Windows)
  5. エラーを処理してUIを表示する

スマートカードのシリアル番号のなりすましはかなり複雑な攻撃であり、起こりそうにありません。

0
AleSil