0

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 ビットに切り捨てられるのを防ぐ方法がわかりません。

4

1 に答える 1