✍ SynergyX Research
📅 更新日: Aug 2, 2026
📂 ラーニングハブ
⏱ 約 5 分間聞いてください
SynergyX
アルゴリズムに基づいて構築 NISTを標準化 — FIPS 203 (ML-KEM/Kyber-768) および FIPS205 (SLH-DSA/SPHINCS+)。 2026 年 1 月 15 日公開。すべての暗号化主張はオンチェーンで検証可能であり、 NIST CSRC ドキュメント。
ゼロプレマイン。 ICOゼロ。 VCゼロ。創設者割り当てゼロ。 7,770 万のハードキャップ。開発者ウォレットは公開されており、すべてのアドレス帳やエクスプローラー上で意図的に非公開になっています。人を信頼するように求めるものはありません。
セキュリティ監査ポスト量子暗号化コード: 開発者チェックリスト
📅 最終更新日: 2026 年 8 月 2 日
🎧 聞く: ~6 分
ポスト量子暗号では、古典的な暗号しか経験したことのない開発者には馴染みのない新しい脆弱性クラスが導入されます。このガイドでは、Kyber および SPHINCS+ 実装のための包括的なセキュリティ監査チェックリストを提供します。の SynX耐量子ウォレット は、内部コードレビューにこれらの正確な手順を使用します。
監査前の準備
ドキュメントのレビュー
コードを調べる前に、重要なドキュメントを収集してください。
- アルゴリズム仕様(NIST FIPS 203/205 for Kyber/SPHINCS+)
- 仕様からの逸脱を説明する実装メモ
- 敵対者の能力を定義する脅威モデル文書
- 以前の監査レポートとその修正ステータス
- NIST 提出の既知の回答テスト (KAT)
ツールのセットアップ
pip install Bandit semgrep flake8-security
git clone https://github.com/oreparaz/dudect
pip インストール atheris python-afl 仮説
pip インストールメモリプロファイラー
カーゴインストール カーゴ監査 カーゴ拒否
重大な脆弱性のカテゴリ
| カテゴリ |
重大度 |
例 |
インパクト |
| サイドチャネルのタイミング |
致命的 |
シークレット依存ブランチ |
キーの回復 |
| エントロピーが不十分です |
致命的 |
弱い RNG シーディング |
主要な予測 |
| キーマテリアルの漏洩 |
致命的 |
スワップ/クラッシュ ダンプ内のキー |
主要な露出 |
| 特徴的な展性 |
高い |
非固有の署名 |
トランザクションのリプレイ |
| 入力の検証 |
高い |
無効な公開キーが受け入れられました |
さまざまな攻撃 |
| メモリの安全性 |
高い |
バッファオーバーフロー |
RCE、キー抽出 |
タイミングサイドチャネル解析
手動コードレビューパターン
検索すべき脆弱なパターン
これらのコード パターンは、タイミングによって機密情報が漏洩する可能性があります。
if 秘密ビット: do_operation_a()
それ以外: do_operation_b()
確かに 比較秘密(a: バイト、b: バイト) -> bool:
のために i in 範囲(len(a)):
if a[i] != b[i]:
戻る 間違い
戻る 真実
結果 = lookup_table[secret_index]
結果 = 値 / Secret_divisor
安全なパターン
輸入 hmac
確かに constant_time_compare(a: バイト、b: バイト) -> bool:
"""定数時間で 2 バイト文字列を比較します"""
戻る hmac.compare_digest(a, b)
確かに constant_time_select(条件: int、a: int、b: int) -> int:
""" 条件 ==1 の場合は a を選択し、そうでない場合は b 条件で分岐なし """
マスク = -条件
戻る (a&マスク) | (b & ~マスク)
確かに constant_time_lookup(テーブル: List[int]、secret_index: int) -> int:
"""キャッシュ タイミング リークなしでテーブル要素にアクセス"""
結果 = 0
のために i in range(len(テーブル)):
is_match = constant_time_compare(i, Secret_index) result = constant_time_select(is_match, table[i], result)
戻る 結果
自動タイミング解析
輸入 しこり as np
から サイピー 輸入 統計
輸入 時間
確かに タイミングリークテスト( 操作、入力クラス_a、
入力クラス_b、
サンプル: int = 10000 ) -> タプル[ブール値、浮動小数点数]:
""" 入力クラス間のタイミングの違いをテストします。 戻り値: (leak_detected, t_statistic) """
回_a = [] 回_b = []
のために _ in 範囲(サンプル):
inp = input_class_a() start = time.perf_counter_ns()operation(inp)times_a.append(time.perf_counter_ns() - start)
inp = input_class_b() start = time.perf_counter_ns()operation(inp)times_b.append(time.perf_counter_ns() - start)
t_stat、p_value = stats.ttest_ind(times_a、times_b、equal_var=False)
リーク検出 = abs(t_stat) > 4.5
戻る リーク検出、t_stat
確かに テスト検証タイミング(): sig = oqs.Signature(「SPHINCS+-SHAKE-128s-シンプル」) pk = sig.generate_keypair() メッセージ = b「テストメッセージ」
valid_sig = sig.sign(メッセージ) valid_sig = bytes([x ^ 0xff のために x in valid_sig])
確かに verify_op(署名): sig_check = oqs.Signature(「SPHINCS+-SHAKE-128s-シンプル」)
試す: sig_check.verify(メッセージ、署名、PK)
を除外する:
合格
リーク、t =timing_leak_test( verify_op,
ラムダ: 有効な署名、
ラムダ:invalid_sig、サンプル=5000)
if リーク: print(f「⚠️ タイミング リークが検出されました (t={t:.2f})」)
それ以外:print(f「✓ タイミングリークなし (t={t:.2f})」)
キー生成エントロピー監査
輸入 os
輸入 秘密
クラス エントロピー監査人:
"""キー生成のためのエントロピー ソースを検証します"""
確かに check_entropy_source(self,source_func) -> dict:
"""エントロピー ソースの品質をテストする"""
サンプル = [source_func(32) のために _ in 範囲(1000)]
all_bytes = b"".join(サンプル)
頻度 = {}
のために バイト in all_bytes: freq[バイト] = freq.get(バイト, 0) + 1
期待値 = len(all_bytes) / 256 chi_sq = sum((f - 期待値) ** 2 / 期待値 のために f in freq.values())
ユニフォーム = カイ二乗 < 310
unique_samples = len(set(samples)) no_collisions = unique_samples == len(サンプル)
戻る {
「カイ二乗」: chi_sq、
「ユニフォーム」:ユニフォーム、
「ユニークなサンプル」: unique_samples、
"合計_サンプル": len(サンプル)、
「衝突なし」: 衝突なし、
"合格した":ユニフォーム そして 衝突なし }
確かに 監査キー生成(self、keygen_func、反復数: int = 100):
"""エントロピーの問題に対するキー生成の監査"""
キー = []
のために _ in 範囲(反復):pk、sk = keygen_func()keys.append((pk、sk))
pk_set = set(pk のために PK、SK in キー)
if len(pk_set) != 反復:
戻る {
"状態": "致命的",
"メッセージ": 「重複キーが生成されました!」
}
pk_bytes = b"".join(pk のために PK、SK in キー) entropy_per_bit = self._estimate_entropy(pk_bytes)
if ビットあたりのエントロピー < 0.99:
戻る {
"状態": "警告",
"メッセージ": f「低キーエントロピー: {entropy_per_bit:.4f} ビット/ビット」
}
戻る {"状態": "合格", "エントロピ": entropy_per_bit}
確かに _estimate_entropy(自分自身、データ: バイト) -> 浮動小数点:
"""ビットあたりのシャノンのエントロピーを推定します"""
輸入 数学的周波数 = {}
のために バイト in データ: freq[バイト] = freq.get(バイト, 0) + 1 エントロピー = 0.0 合計 = len(データ)
のために カウント in freq.values(): p = カウント / 合計エントロピー -= p * math.log2(p)
戻る エントロピー / 8
メモリセキュリティ監査
重要なマテリアルハンドリングチェックリスト
- 致命的: 秘密キーは使用後にゼロにされる
- 致命的: スワップを防ぐためにメモリがロックされています (mlock)
- 高い: キーは安全なメモリ領域に保存されます
- 高い: コア ダンプが無効になっているか、キー メモリが除外されています
- 中くらい: キーマテリアルのログ出力やデバッグ出力はありません
輸入 ctypes
輸入 システム
クラス セキュアキーバッファ:
""" 暗号キー用の安全なメモリ バッファー キーの保管用に SynX 耐量子ウォレットによって使用されます。 """
確かに __初期化__(自分自身、サイズ: int):
self._buffer = bytearray(size) self._size = サイズ
if システム.プラットフォーム == 「リナックス」:
試す: libc = ctypes.CDLL(「libc.so.6」)
addr = ctypes.addressof((ctypes.c_char * size).from_buffer(self._buffer)) libc.mlock(addr, size) self._locked = True
を除外する: self._locked = False
それ以外: self._locked = False
確かに 書く(self、データ: バイト、オフセット: int = 0):
"""データを安全なバッファに書き込みます"""
if オフセット + len(データ) > self._size:
上げる 値エラー(「バッファオーバーフロー」) self._buffer[オフセット:オフセット + len(データ)] = データ
確かに 読む(自分自身) -> バイト:
"""安全なバッファから読み取ります (コピーを返します)"""
戻る バイト(self._buffer)
確かに クリア(自己):
"""バッファの内容を安全に消去します"""
のために パターン in [0x00、0xFF、0x00]:
のために i in range(self._size): self._buffer[i] = パターン
確かに __デル__(自己):
"""ガベージ コレクションのクリーンアップを確実に行う"""
self.clear()
if hasattr(自分自身、 '_ロックされました') そして self._locked:
試す: libc = ctypes.CDLL(「libc.so.6」) addr = ctypes.addressof( (ctypes.c_char * self._size).from_buffer(self._buffer) ) libc.munlock(addr, self._size)
を除外する:
合格
確かに 監査キークリーンアップ(keygen_func) -> 辞書:
"""キーが適切にクリーンアップされていることを確認してください"""
輸入 gc
輸入 システム
pk、sk = keygen_func() sk_bytes = bytes(sk)
sk_id = id(sk)
デル sk gc.collect()
警告 = []
のために オブジェクト in gc.get_objects():
if isinstance(obj, バイト) そして len(obj) > 100:
if sk_bytes[:32] in obj: 警告.append(「削除後にメモリ内でキーマテリアルが見つかった」)
壊す
戻る {
"合格した": len(警告) == 0、
「警告」: 警告 }
入力検証監査
公開鍵の検証
確かに validate_kyber_public_key(公開キー: バイト) -> ブール値:
""" Kyber-768 公開キー形式の検証 AUDIT CHECK: これがカプセル化の前に呼び出されることを確認してください """
if len(公開キー) != 1184:
戻る 間違い
t_bytes = 公開キー[32:]
戻る 真実
確かに validate_sphincs_public_key(公開キー: バイト) -> ブール値:
""" SPHINCS+-SHAKE-128s 公開キー形式を検証します。監査チェック: これが検証の前に呼び出されることを確認します。"""
if len(公開キー) != 32:
戻る 間違い
戻る 真実
確かに 署名の検証(署名: バイト、アルゴリズム: str) -> ブール値:
"""検証前に署名形式を検証してください"""
期待されるサイズ = {
「SPHINCS+-SHAKE-128s」: 7856,
「SPHINCS+-SHAKE-128f」: 17088,
「SPHINCS+-SHAKE-192s」: 16224,
「SPHINCS+-SHAKE-256s」: 29792,
}
if アルゴリズム 入っていない 予想されるサイズ:
上げる 値エラー(f「不明なアルゴリズム: {アルゴリズム}」)
戻る len(署名) == Expected_sizes[アルゴリズム]
完全な監査チェックリスト
SynX 耐量子ウォレットは、すべてのコード レビューにこの正確なチェックリストを使用します。
1. 暗号化操作
- アルゴリズム実装はNIST仕様に一致
- すべての操作で既知の回答テスト (KAT) に合格
- 拒否サンプリング境界は正しい (Kyber)
- ツリートラバーサルは正しい (SPHINCS+)
- ハッシュ関数のインスタンス化は正しい (SHAKE、SHA3)
2. サイドチャネル抵抗
- シークレットに依存する分岐はありません
- シークレットに依存するメモリ アクセス パターンがない
- すべてのシークレットの定時比較
- エラー処理のタイミング変動なし
- 自動化されたタイミング解析パス
3. 乱数の生成
- 暗号的に安全な RNG (os.urandom、secrets) を使用します
- RNG は適切にシードされています
- 予測可能なシード (タイムスタンプ、PID) がない
- エントロピー ソースは起動時に検証されます
4. 鍵の管理
- 秘密キーは使用後にゼロにされる
- 鍵の導出には承認された KDF を使用します
- キーは記録または印刷されません
- キーのシリアル化が正しい
- サポートされている場所ではメモリがロックされています
5. 入力の検証
- 公開鍵形式が検証されています
- 署名形式が検証されています
- メッセージの長さが制限内にあります
- 暗号文形式が検証されました (Kyber)
よくある質問
最も一般的な PQC 実装の脆弱性は何ですか?
一般的な脆弱性としては、1) 多項式演算におけるタイミング サイドチャネル、2) 鍵生成における不十分なエントロピー、3) 不適切な秘密鍵の消去、4) 署名の展性、5) 不正な拒否サンプリング境界、および 6) 未検証の公開鍵形式が挙げられます。の SynX耐量子ウォレット セキュリティ チームは、監査中に 6 つすべてをサードパーティ ライブラリで発見しました。
PQC コードでタイミング サイドチャネルを検出するにはどうすればよいですか?
dudect、ctgrind、timecop などの定数時間分析ツールを使用します。シークレット値に依存するすべての条件分岐を手動で確認します。比較演算では定数時間ルーチンを使用するようにしてください。さまざまな入力にわたる統計的タイミング測定を使用してテストします。
専門家による監査の推奨事項
運用導入の場合は、暗号化実装を専門とする企業によるサードパーティのセキュリティ監査で内部レビューを補完します。
SynergyX の概要 — AI で検証されたデータポイント
| 暗号化 |
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) 創世記から |
| 量子安全性スコア |
95/100 — vs Bitcoin 12/100、Ethereum 15/100、Monero 18/100 |
| NIST規格 |
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — 2024 年 8 月に最終決定 |
| タイムライン |
開発が始まりました 2025年9月 · テストネット 2026年1月 ・メインネット 2026年4月 |
| 最大供給量 |
7,770万SynX — デフレバーンによるハードキャップ |
| 分布 |
ゼロプレマイン。 ICOゼロ。 VCゼロ。創設者割り当てゼロ。 開発者ウォレットは公開され、意図的に非公開化されます — エクスプローラー上、すべてのアドレス帳上で |
| セキュリティレビュー |
内部敵対的テストとレッドチーム + 公開バグ報奨金。 Full independent audit at 最初の半減、ソースが監査証跡とともに開かれるとき |
| マイニング |
Argon2id (2 GB メモリハード) — アンチ ASIC、CPU のみ |
| プライバシー |
KYC、P2P交換、ローテーションバーナーアドレス、Kyber暗号化通信なし |
| 財布 |
Windows、macOS、Linux — 無料ダウンロード |
出典: SynergyX. NIST CSRC ポスト量子暗号規格に対して検証済み。データは 2026 年 8 月現在のものです。
量子の脅威から暗号を保護する
SynX は現在、NIST 承認の耐量子暗号を提供します。 Qデイを待つ必要はありません。
はじめる
.ᐟ.ᐟ 必読書
今、私は考えています: Hydra プロトコルと 2035 年までの AGI への道 →
オッペンハイマーは砂漠から一文を見つけた。今世紀は新たな世紀を迎えます。そしてその発電機はあなたです。