質問

http://auto.howstuffworksで車のリモートエントリシステムに関する記事を見つけました。 com / remote-entry2.htm 3番目の箇条書きでは、著者は次のように述べています。

  

送信機と受信機の両方が同じ擬似乱数ジェネレーターを使用します。送信機は、40ビットコードを送信するときに、擬似乱数ジェネレータを使用して新しいコードを選択し、メモリに保存します。一方、受信者が有効なコードを受信すると、同じ擬似乱数ジェネレータを使用して新しいものを選択します。このようにして、送信機と受信機が同期されます。受信者は、期待するコードを受信した場合にのみドアを開きます。

同じ乱数を同時に生成する2つのPRNG関数を使用できますか?

役に立ちましたか?

解決

PRNG関数では、関数の出力は「シード」値に依存するため、同じシード値が与えられた連続した呼び出しから同じ出力が提供されます。はい、そうです。

例(C#を使用)は次のようになります。

// Provide the same seed value for both generators:
System.Random r1 = new System.Random(1);
System.Random r2 = new System.Random(1);

// Will output 'True'
Console.WriteLine(r1.Next() == r2.Next());

これは、当然、何らかの決定論的な式を使用してその値を生成する乱数ジェネレーターに依存しています。エントロピーまたはノイズのプロパティを生成に使用するいわゆる「真の乱数」ジェネレーターを使用する場合、エントロピー状態を複製できない限り、何らかの入力が与えられたときに同じ値を生成することは非常に困難です関数への両方の呼び出し-もちろん、そのようなジェネレーターを使用する目的を無効にします...

リモートキーレスエントリシステムの場合、この機能を利用するために決定論的なPRNG関数を使用する可能性が非常に高くなります。この種の機能を提供して、電子回路の乱数を生成するICが数多くあります。

編集:リクエストに応じて、指定されたシード値に依存しない非決定的乱数ジェネレーターの例を次に示します。量子乱数ジェネレータ。もちろん、コメントでフリースペースが指摘しているように、これは真の乱数を生成するため、疑似乱数ジェネレーターではありません。

他のヒント

ほとんどのPRNGには、シードの形式の内部状態があり、次の値を生成するために使用します。内部ロジックは次のようになります。

nextNumber = function(seed);
seed = nextNumber;

したがって、新しい数値を生成するたびに、シードが更新されます。同じアルゴリズムを使用する2つのPRNGに同じシードを与えると、 function(seed)は同じ数に評価されます(それらが確定的である場合、ほとんどの場合)。

質問に直接適用されます。送信機はコードを選択し、それをシードとして使用します。受信者は、それを受信した後、これを使用してジェネレータをシードします。これで2つが整列され、同じ値が生成されます。

ErikとClaudiuが言ったように、PRNGに同じ値をシードすると、同じ出力になります。

PRNGの基礎としてAES(またはその他の暗号化アルゴリズム)を使用する場合の例を見ることができます。両方のデバイス(送信機と受信機)で一致する入力を使用し続ける限り、出力も一致します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top