Perl で安全な乱数を作成する方法は多数あります。これらの方法のほとんどには、1 つ以上の Perl モジュールが含まれます。これらの Perl モジュールの多くは、依存関係としてさらに多くの Perl モジュールを必要とします。
物事を非常に軽量に保ち、必要な依存関係を減らしたいので、 を使用しMath::Random::ISAAC
、 から自分でシードすることにしました/dev/urandom
。
では、別のモジュールを使用せずに Perl でから 128 ビット (かなりの量だと思います) のデータを読み取り、/dev/urandom
それを に渡すには、どのような方法が推奨されるISAAC
でしょうか?
読み取りとフォーマットの正しい方法がどうなるかわかりません。シードを渡すサブのコピーを次に示します。
sub new {
my ($class, @seed) = @_;
my $seedsize = scalar(@seed);
my @mm;
$#mm = $#seed = 255; # predeclare arrays with 256 slots
# Zero-fill our seed data
for ($seedsize .. 255) {
$seed[$_] = 0;
}
my $self = {
randrsl => \@seed,
randcnt => 0,
randmem => \@mm,
randa => 0,
randb => 0,
randc => 0,
};
bless($self, $class);
$self->_randinit();
return $self;
}
私は配列、スカラー、バイト文字列などの詳細の専門家ではありません。urandom
そのため、データを@seed
適切にフォーマットする方法がよくわかりません。128 ビットは十分なランダム性だと思いますが、そのすべてのエントロピーが確実に になるようISAAC
にする方法と、途中で 64 ビットまたは 32 ビットに切り捨てられるのを防ぐ方法がわかりません。