11

サードパーティ API 用の OO インターフェイスを提供する Perl モジュールを作成しています。ユーザーのパスワードを取得して、サード パーティの API に送信する前に、暗号化された形式で保存したいと考えています。このモジュールは、UNIX ベースのシステムでのみ実行することを意図しています。

キャプチャ機能を実行する次のスクリプトを作成しました。これは、パスワード変数を暗号化された形式でのみ保存するという意味で正しいですか? 私は、パスワードがメモリ内の他の場所で使用できる可能性があることを懸念しています (たとえば、$_ は undef ですが、$_ の下)。

注意。OSがエントリをログに記録したり、プロセス名にパスワードを含めたりしないことを前提として、@ARGVではなくSTDINを使用しています。入力を暗号化されていない一時的な変数に格納する必要がないように、chomp ではなく代替の正規表現を使用しています。また、入力キャプチャ ソフトウェアがユーザーの入力を引き続きキャプチャできるという意味で、完全に安全であるということは不可能であると想定しています。

前もって感謝します

use strict;
use warnings;
use Crypt::CBC;
use 5.14.0;

print 'Please enter your password: ';
system('tty -echo');
my $key = Crypt::CBC->random_bytes(56);
my $iv  = Crypt::CBC->random_bytes(8);
my $cipher = Crypt::CBC->new(-key    => $key,
                             -cipher => 'Blowfish',
                             -salt   => 1,
                             );
my $ciphertext = $cipher->encrypt(<STDIN> =~ s/\n$//r);
system('tty echo');
4

3 に答える 3