PKCS#11または他の同様のインターフェイスを備えたスマートカードを使用しており、証明書と秘密キーが含まれています。
PINで保護されたスマートカードとその上のデータを使用して、ユーザーのローカル(ネットワークなし)認証を行いたいのですが。
それを行い、それを信頼するための良いスキーム/アルゴリズムは何ですか?
私の最初のアイデアは次のことをすることです:
それは理にかなっていますか?またはこれに関する基準はありますか?
次の変更を提案します
- ユーザー名/ PINを入力してください
- ユーザーとしてスマートカードにログインします(失敗した場合はfalseを返します)
通常、デジタル証明書付きのスマートカードには「ユーザー名」がありません。選択した証明書の秘密鍵のロックを解除するために必要なピン
- 証明書の有効性を確認します(有効でない場合はfalseを返します)
正解です。これは、使用可能な証明書をフィルタリングするために必要です。あなたはいくつか持つことができます(これがあなたのシナリオであるかどうかはわかりません)
- ユーザー名が証明書のCNと等しいかどうかを確認します(そうでない場合はfalseを返します)ユーザーが選択する証明書は何もないため、通常、この手順はデジタル署名の後に行われます。
また、ユーザーがログに記録され、CNにユーザー名が含まれていると想定しています。スマートカードを使用してプロセスを認証する場合、通常は逆です。ユーザーが証明書を選択し、ユーザー名が証明書属性(CN、SERIALNUMBERまたはカスタムの属性)から抽出されます。
- ランダムデータを生成し、スマートカードの秘密キーを使用して署名する
- 署名が有効かどうかを確認します(有効でない場合はfalseを返します)
- 真を返す
これはかなり理論的な質問であり、プラットフォームを指定しなかったためです-Windows/Linux/MacおよびインフラストラクチャAD /スタンドアロン/ワークグループ。ロールアウトスキーム/要件など。また、ネットワークインフラストラクチャがないため、証明機関を実行して証明書を発行することはできません。
あなたのアプローチを簡素化するための私の提案:
認証するため:
スマートカードのシリアル番号のなりすましはかなり複雑な攻撃であり、起こりそうにありません。