カード番号と秘密鍵ファイルを一緒に保存するかどうかはわかりません。ユーザーパスワードを使用して秘密鍵ファイルを暗号化するだけで、暗号化された秘密鍵ファイルが利用可能な場合、辞書スタイルの攻撃への扉が開かれているように見えます。
かなり遅くなる可能性のある公開鍵暗号を使用する理由がわかりません。また、ユーザーごとに1つのキーペアのモデルは拡張できない場合があります(ファイルの数、公開キー操作のパラメーターを生成できますか)。あなたは虐待的な振る舞いをしているかもしれないことに注意してください-盗まれたカードのリストが良いかどうかをチェックする人々。
独自のマスターシークレットを追加し、キースケジュールを組み合わせて導出することにより、ユーザーが不在の場合でもカード番号の使用を防ぐことができます。一般に、ユーザーが不在の場合はカード番号を使用する必要があるため、ほとんどの加盟店はこの厳格な要件に従うことができません。
ユーザー固有のキーが必要な場合(そして毎回異なるIVを使用する必要がある場合)、openssl EVP_BytesToKeyルートに移動し、暗号化キーとivが派生するマスターシークレットを使用して毎回異なるソルトを渡すことができます(およびユーザーごとに異なります)。
最後に、支払い手段の使用は、説明されているようにユーザーパスワードだけで保護されます。一部のユーザーは弱いパスワードを選択します。したがって、追加のプルーフを使用して、カードがユーザーのものであることを確認することをお勧めします。これは、友好的な不正のチャージバックと戦い、実際の不正のチャージバックを低く抑えることができるため、自分のためのものです。