.NETSystem.Security.Cryptography
名前空間には、クレジット カードの詳細を暗号化するために使用できる、かなり当惑するようなアルゴリズムのコレクションがあります。どちらがベストか?
比較的短い文字列の場合、明らかに安全である必要があります。
編集: 私は英国にいますが、3 桁の CVV 番号が決して保存されない限り、暗号化されたクレジット カードの詳細を保存しても問題ないことを理解しています。そして、すばらしい回答をありがとうございました。
.NETSystem.Security.Cryptography
名前空間には、クレジット カードの詳細を暗号化するために使用できる、かなり当惑するようなアルゴリズムのコレクションがあります。どちらがベストか?
比較的短い文字列の場合、明らかに安全である必要があります。
編集: 私は英国にいますが、3 桁の CVV 番号が決して保存されない限り、暗号化されたクレジット カードの詳細を保存しても問題ないことを理解しています。そして、すばらしい回答をありがとうございました。
問題はありませんが、質問は少し「見当違い」です。「銀の弾丸」ソリューションはありません。暗号化全般について読んでから、脅威のモデル化を行うことをお勧めします。自問すべきいくつかの質問 (決して包括的なリストではありません):
後で編集: 同じカテゴリの標準暗号化アルゴリズム (たとえば、3DES と AES - どちらも対称ブロック暗号) は同等の強度であることに注意してください。ほとんどの (商用) システムは、誰かが暗号化を強引に行ったために壊れたのではなく、脅威のモデル化が十分に詳細に行われていなかった (または完全に何もなかった) ためです。たとえば、すべてのデータを暗号化できますが、SQL インジェクションに対して脆弱な公開 Web インターフェイスを使用している場合、あまり役に立ちません。
それは問題ではありません。
完全なカード番号は決してディスクに触れてはいけません。
重要なのは認証コードです。
トレースなどの場合は、最後の4桁のxxxx xxxxxxxx1234と有効期限のみを使用します。
カード番号を保存する場合、暗号化の選択は取得銀行によって義務付けられます。
あなたが取得者でない限り、その場合、あなたが尋ねるべき古いunixプログラマー/db2の人がいるはずです。
「クライアントのCookieにローカルに保存することはできません」<-決して
本当に正当な理由がない限り、単純に保存するべきではないという見方を付け加えておきます。Cookieに保存するのは非常に悪い考えです。簡単に手に入れることができません(何誰かがCookieを盗んだ場合に発生します-それがどれほど暗号化されているかは関係ありません)。
繰り返し支払いを行う必要がある場合、ほとんどのCCプロバイダーは、カード番号をまったく保持せずに、最初の支払いから何らかのトークンを保存することでこれを行う方法を提供します(顧客に表示するために最後の4桁を保持することができます)どのカードが保存されているかがわかるようにします)。
本当に、それをしないでください!
また、CCVコードを保持することは絶対にしないでください。
PCI DSSコンプライアンス ルールに従って、業界をリードする暗号化標準で十分です。したがって、256 ビットのキーを使用する 3DES で十分です (ただし、他の標準を使用することもできます)。これをチェックしてくださいhttp://pcianswers.com/2006/08/09/methods-of-encrypting-data/
ここで完全性を忘れないでください。攻撃者がキーを知らないが、暗号文を操作できる場合、すぐに使用できる暗号に対する偽造攻撃があります。これらは、次の場合に特に厄介になる可能性があります。
それはまさにクレジットカードの場合です。したがって、独自のチェックサムをロールせずにSystem.Security.Cryptography AESまたは3DESをCBCモードで使用すると、危険な場合があります。読む:秘密鍵を持たない攻撃者が、あるクレジットカード番号を別のクレジットカード番号に置き換える可能性があります。
サード パーティの支払いゲートウェイを使用している場合は、番号を保存する必要はありません。
意味はありません。
考慮すべき法的側面もあります。他の場所の状況はわかりませんが、ドイツではクレジットカード番号を保存することは許可されていません1)。限目。それらを暗号化するかどうか、およびどの形式で保存するかは関係ありません。
クレジットカード番号の強力なハッシュ(SHA-256?)を、最後の4桁とアカウント番号とともに保存するだけで、(ここでは、司法の知識がなくても、メモリから参照できます)実行できます。そして、はい、これらの情報だけから完全な数を再構築することは簡単です。法則は必ずしも論理的ではありません。
1)連邦政府が認定したクレジットカード機関の場合を除きます。
ヒント:クレジットカード番号を保存することが合法かどうかを調査する必要があります。たとえばスウェーデンでは、 PCI(Payment Card Industry)の認定を受ける必要があります。そこでは、内部および外部のセキュリティがテストされます(他にも多くのことがあります)。
クレジットカード情報を保存する前に、1回か2回の両方を検討する必要があります。これを間違えると、訴訟費用が高くつく可能性があるためです。
クレジット カードを公開鍵で暗号化します。秘密鍵は、支払い処理マシンにのみ渡してください。その後、支払い処理マシンはデータベースにクエリを実行して作業を行うことができ、他の誰も、エントリを追加したマシンであっても、それを解読することはできません.
PHP の openssl_seal のようなものですが、必要に応じて別のアルゴリズムを使用することもできます。
3des は非常に優れており、salt を一緒に保存し、データベースや構成ファイル以外の場所に標準キーを保持します。そうすれば、あなたが乗っ取られた場合、彼らはそれを解読できません.