HLF_TxTime_spoofing - Hyperledger Fabric ブロックチェーンにおけるトランザクション時刻の改ざん(GetTxTimestamp() や GetHistoryForKey() の利用)問題を扱う PoC です。v2.5.5 および v3.0.0-beta でテスト済みです。
このプロジェクトは、以下の複数のパーツで構成されています:
ビジネスロジックの動作を理解するための追加関数: CalcDividents() - 指定された日数と初期預金額に対して発生した配当を返します subtractTimestamp() - 現在時刻と初期預金時の時刻との差を返します
Stake_insecure() を呼び出して、初期預金額で預金を追加します。CheckDividents_insecure() を呼び出して、預金額が変更されていないことを確認します。クライアントのローカル時刻を変更し、再度 CheckDividents_insecure() を呼び出します。
金融攻撃: 時刻を 1 年進めることで、年 20% の利息を得ることができました。
金融攻撃の成功
同様に、GetHistoryForKey() でもトランザクション時刻が操作可能であることを確認します。
このチェーンコードの変種では、NTP(Network Time Protocol)サーバーから受信した時刻とトランザクション時刻を照合します(ntp クライアントパッケージを使用)。各チェーンコードは配布用に独自の NTP サーバーアドレスを持ちます(すなわち異なるチェーンコードパッケージ)。時刻にずれがある場合は、「wrong time」というエラーが表示されます。NTP トラフィックのデータは偽装される可能性があることに注意してください(データは平文で送信されます)。
金融攻撃の失敗
このチェーンコードの変種では、NTS(Network Time Security)サーバーから受信した時刻とトランザクション時刻を照合します(nts クライアントパッケージを使用)。各チェーンコードは配布用に独自の NTS サーバーアドレスを持ちます(すなわち異なるチェーンコードパッケージ)。時刻にずれがある場合は、「wrong time」というエラーが表示されます。
金融攻撃の失敗
このチェーンコードの変種では、トランザクション時刻をローカルタイム(すなわちピアノード内の時刻)と照合します。時刻にずれがある場合は、「wrong time」というエラーが表示されます。すべてのピアノードで正しい時刻が設定されている必要があることに注意してください。
金融攻撃の失敗
hlf-time-oracle は、Hyperledger Fabric ブロックチェーン用のチェーンコードであり、他のチェーンコードに正確な時刻を提供します。hlf-time-oracle は ntp パッケージ と nts パッケージ に基づいています。これにより、ブロックチェーンクライアントによるトランザクション時刻の操作に関連するセキュリティ問題を解決します。このチェーンコードは GetTimeNtp() および GetTimeNts() 関数を提供します。これらの関数を呼び出すと、NTP(Network Time Protocol)および NTS(Network Time Security)サーバーへの呼び出しが作成されます。これらのいずれかのサーバーから受信した時刻は、クライアント側で定義されたトランザクション時刻の正確性を検証するために使用できます。ブロックチェーン用チェーンコードの開発者は、NTP および NTS サーバーとやり取りするコードを個別に記述する代わりに、hlf-time-oracle を使用できます。hlf-time-oracle は動作中にブロックチェーンへデータを一切保存しません。