web-dev-qa-db-ja.com

認証にチップとピンのクレジットカードを使用していますか?

認証にチップアンドピンクレジットカードを使用したいのですが、システムにカードを登録してから、それを使用してログインします(デモ/エンターテインメントの目的でのみ使用できるため、防弾セキュリティは必要ありません)。

私は、ユーザーがPIN=カードのコードを持っているかどうかを証明するために、明らかに銀行に提出されない)偽のトランザクションを実行するという考えを持っていましたが、どうすれば証明できますか(暗号化されています。トランザクションが成功したときにカードから返されたデータは、何らかの形でカード番号に関連しており、その真正性を確認する方法があると思います)カードは確かにthat登録されたカードです以前は他のランダムなカードの代わりに?

ありがとう。

3
user42178

まず、 [this question] を見てください。

その質問に基づいて、銀行カードについての私の理解は、チップカードが独自のaccNumber + PINを銀行のサーバー用に暗号化された署名付きメッセージに入れて(おそらく、リプレイアタックを回避するためにPOSからのチャレンジデータを使用して)ポイントオブ-sale(POS)端末がこれを送信します。 POS端末はメッセージを読み取ることはできませんが、銀行に送信することはできます。銀行はメッセージを検証し、署名をチェックして、それをデータベース内のaccNumber + PINと比較し、YES/NOをPOS端末に返します。 (免責事項:これは私が想像する方法ですは機能する可能性があります、これが実際に機能するかどうかはわかりません

セキュリティ業界で一般的に使用されている他のチャレンジ質問ベースのアプローチがあります(たとえば、IDバッジがオフィスビルディングに入るなど)。これらは次のように機能します。カードを壁のリーダーに近づけると、チップカード、カードリーダー、およびデータベースは次のように交換されます。

  1. Chip CardtoReader:「私はJohn Smithであり、私の公開鍵はpub_key。」
  2. ReadertoDatabase: "pub_keyJohn Smithに属していますか?"
  3. DatabasetoReader: "はい。"
  4. ReadertoChip Card: "一致する秘密鍵があることを証明するには、このメッセージに署名してください:Rand_32bit_msg。」
  5. チップカードからReaderenc_msg = encrypt(Rand_32bit_msg, priv_key)、 "こちらがenc_msgです。」
  6. Readerdecrypt(enc_msg, pub_key) == Rand_32bit_msg? 「わかりました、あなたはあなたが秘密鍵を持っていると信じています、あなたは来ます!」

おそらく、さまざまなメーカーからチップカードとリーダーのセットを購入できますが、これが趣味のプロジェクトの予算内であるかどうかはわかりません。

2
Mike Ounsworth