メインコンテンツまでスキップ

3.4. Problems with Clocks and Serial Numbers (クロックとシリアル番号の問題)

3.4. Problems with Clocks and Serial Numbers (クロックとシリアル番号の問題)

コンピュータクロックおよび類似のオペレーティングシステムまたはハードウェア値は, その仕様から見えるよりもはるかに少ない実際の予測不可能性ビットを提供します。

多数のシステムでクロックに関するテストが行われ, その動作は広く予期しない方法で変化する可能性があることがわかりました。あるハードウェアセット上で動作するオペレーティングシステムの 1 つのバージョンは, たとえば, クロックでマイクロ秒の解像度を実際に提供する場合がありますが, "同じ" システムの異なる構成では常に同じ下位ビットを提供し, はるかに低い解像度で上位ビットのみをカウントする場合があります。これは, 名目上のクロック解像度に基づいて値が "変更されるべき" 十分な時間が経過した場合でも, クロックの連続読み取りで同一の値が生成される可能性があることを意味します。また, クロックを頻繁に読み取ると, 2 つの読み取り間でクロックが変更されていないかチェックし, 1 つ増やす追加のコードのために, 人工的な連続値が生成される場合もあります! そのようなシステムクロックに基づいて予測不可能な数を生成するポータブルなアプリケーションコードを設計することは, システム設計者がシステムクロックのプロパティを常に知っているわけではないため, 特に困難です。

ハードウェアシリアル番号 (イーサネット MAC アドレスなど) の使用も, 推測するよりも少ない一意性ビットを提供する場合があります。そのような量は通常高度に構造化されており, サブフィールドには限られた範囲の可能な値のみがあるか, または概略の製造日または他のデータに基づいて値を簡単に推測できる場合があります。

たとえば, コンピュータとイーサネットアダプタの両方を製造する会社は, 少なくとも内部的には独自のアダプタを使用する可能性が高く, これにより組み込みアドレスの範囲が大幅に制限されます。

上記のような問題により, コードがさまざまなコンピュータプラットフォームやシステムに移植される場合, 予測不可能な量を生成するコードの生成が困難になります。