メインコンテンツへスキップ
検証ラボに戻る

素数とSHA-256を解析する

手順が分かることと、未知の答えが見つかることは、同じではありません。

公開・資料確認:

今回の答え

素数は、判定や分布を数学的に解析できます。SHA-256は、素数由来の定数も64段の計算も再現できます。以下にその答えと確かめ方を掲載します。ただし、素数分布の未解決問題を解いたわけでも、SHA-256の一般的な逆算方法を発見したわけでもありません。

素数の答え

素数とは、正の約数が1と自分自身だけである、2以上の整数です。1は素数でも合成数でもありません。「素数かを判定する」「合成数を素因数分解する」「素数全体の分布を調べる」は別の問いです。AKS法は、入力の桁数に対して多項式時間で素数判定できることを証明しました。それだけで素因数分解も同じように速くできるとはいえません。 AKS — PRIMES is in P

証明できる規則:6k ± 1

3より大きい素数は、必ず6k−1か6k+1の形です。6で割った余りが0・2・4なら2の倍数、3なら3の倍数なので、余り1か5だけが残ります。しかし逆は成り立ちません。25=6×4+1=5×5、35=6×6−1=5×7は合成数です。この規則は候補を絞る条件であり、素数判定の答えそのものではありません。

なぜ√nまで調べればよいのか

もしn=ab(a,b>1)なら、aとbの両方が√nより大きいとab>nになり矛盾します。したがって合成数には√n以下の因数があり、その因数にも素因数があります。√n以下の素数で一度も割り切れなければ、nは素数です。これは小さな数を理解するための試し割りであり、巨大な数に最適な方法という意味ではありません。

97素数
試した素数:2, 3, 5, 7どれでも割り切れません。
91合成数
試した素数:2, 3, 5, 791 = 7 × 13
1〜100をふるいにかけると、残る素数は25個。太字と下線が素数です。

素数:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

個数の法則と、まだ解けていない問い

x以下の素数の個数をπ(x)とすると、素数定理はπ(x)/(x/ln x)がxを大きくするにつれて1へ近づくと述べます。lnは自然対数です。個々の数の判定ではなく、大きな範囲の個数を捉える定理です。 Clay — Riemann’s 1859 Manuscript

x = 100
π(x) = 25; x/ln x ≈ 21.7
x = 1,000
π(x) = 168; x/ln x ≈ 144.8
x = 10,000
π(x) = 1,229; x/ln x ≈ 1085.7

この有限の計算例は、定理の証明ではありません。また、分布の誤差を深く制約するリーマン予想は、確認日現在も未解決です。本ページはその証明を提示していません。 Clay — Riemann Hypothesis

SHA-256の計算

SHA-256は、入力に区切りの1ビット、ゼロ、元のビット長を補い、512ビットのブロックに分けます。各ブロックを32ビットの語で64段処理し、256ビットを出力します。計算はビットの回転・シフト・論理演算と、2³²を法とする加算の組み合わせです。 NIST — FIPS 180-4, §§4.2.2, 5, 6.2

素数が定数になる場所

8語の初期値は最初の8素数の平方根、64個のラウンド定数は最初の64素数の立方根について、小数部分の先頭32ビットを取ります。たとえば最初の素数2なら、次の値になります。fracは小数部分、floorは切り捨てを表します。 NIST — FIPS 180-4, §§4.2.2, 5, 6.2

H₀ = floor(2³² × frac(√2))0x6a09e667

K₀ = floor(2³² × frac(∛2))0x428a2f98

これらは秘密鍵ではなく、公開された固定値です。SHA-256の計算は素因数分解問題ではありません。定数の由来を理解することと、出力から入力を探すことは別です。

実際の答え:SHA-256("abc")

入力は引用符・改行なしのabc。UTF-8で3バイト、元の長さは24ビットです。下の値は本サイトの教育用コードでビルド時に計算しています。

計算結果(256ビット/16進数64桁)

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
  1. 1. 入力と補完

    入力バイトは616263。最初の語W[0]は61626380、最後の語W[15]は00000018です。80は区切りの1ビットに続くゼロ、18は24の16進表記です。 NIST — SHA-256 intermediate example

  2. 2. 16語から64語を作り、64段を計算

    各段は、8個の作業変数a〜h、メッセージから作る語W[t]、定数K[t]を使って状態を更新します。下の詳細は各段が終わった直後の状態です。

  3. 3. 最後の状態に初期値を加算

    第64段の8語へ初期値の8語を、それぞれ2³²を法として加えます。これを順に連結すると上のハッシュになります。最後の作業変数をそのまま並べた値ではありません。

補完・定数・全64段の計算記録を開く

補完後の512ビット

61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018

初期値 H[0]〜H[7]

6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19

tは仕様と同じ0〜63。各行は更新後のa〜hです。

  1. t = 0

    K = 428a2f98 / W = 61626380

    5d6aebcd 6a09e667 bb67ae85 3c6ef372 fa2a4622 510e527f 9b05688c 1f83d9ab
  2. t = 1

    K = 71374491 / W = 00000000

    5a6ad9ad 5d6aebcd 6a09e667 bb67ae85 78ce7989 fa2a4622 510e527f 9b05688c
  3. t = 2

    K = b5c0fbcf / W = 00000000

    c8c347a7 5a6ad9ad 5d6aebcd 6a09e667 f92939eb 78ce7989 fa2a4622 510e527f
  4. t = 3

    K = e9b5dba5 / W = 00000000

    d550f666 c8c347a7 5a6ad9ad 5d6aebcd 24e00850 f92939eb 78ce7989 fa2a4622
  5. t = 4

    K = 3956c25b / W = 00000000

    04409a6a d550f666 c8c347a7 5a6ad9ad 43ada245 24e00850 f92939eb 78ce7989
  6. t = 5

    K = 59f111f1 / W = 00000000

    2b4209f5 04409a6a d550f666 c8c347a7 714260ad 43ada245 24e00850 f92939eb
  7. t = 6

    K = 923f82a4 / W = 00000000

    e5030380 2b4209f5 04409a6a d550f666 9b27a401 714260ad 43ada245 24e00850
  8. t = 7

    K = ab1c5ed5 / W = 00000000

    85a07b5f e5030380 2b4209f5 04409a6a 0c657a79 9b27a401 714260ad 43ada245
  9. t = 8

    K = d807aa98 / W = 00000000

    8e04ecb9 85a07b5f e5030380 2b4209f5 32ca2d8c 0c657a79 9b27a401 714260ad
  10. t = 9

    K = 12835b01 / W = 00000000

    8c87346b 8e04ecb9 85a07b5f e5030380 1cc92596 32ca2d8c 0c657a79 9b27a401
  11. t = 10

    K = 243185be / W = 00000000

    4798a3f4 8c87346b 8e04ecb9 85a07b5f 436b23e8 1cc92596 32ca2d8c 0c657a79
  12. t = 11

    K = 550c7dc3 / W = 00000000

    f71fc5a9 4798a3f4 8c87346b 8e04ecb9 816fd6e9 436b23e8 1cc92596 32ca2d8c
  13. t = 12

    K = 72be5d74 / W = 00000000

    87912990 f71fc5a9 4798a3f4 8c87346b 1e578218 816fd6e9 436b23e8 1cc92596
  14. t = 13

    K = 80deb1fe / W = 00000000

    d932eb16 87912990 f71fc5a9 4798a3f4 745a48de 1e578218 816fd6e9 436b23e8
  15. t = 14

    K = 9bdc06a7 / W = 00000000

    c0645fde d932eb16 87912990 f71fc5a9 0b92f20c 745a48de 1e578218 816fd6e9
  16. t = 15

    K = c19bf174 / W = 00000018

    b0fa238e c0645fde d932eb16 87912990 07590dcd 0b92f20c 745a48de 1e578218
  17. t = 16

    K = e49b69c1 / W = 61626380

    21da9a9b b0fa238e c0645fde d932eb16 8034229c 07590dcd 0b92f20c 745a48de
  18. t = 17

    K = efbe4786 / W = 000f0000

    c2fbd9d1 21da9a9b b0fa238e c0645fde 846ee454 8034229c 07590dcd 0b92f20c
  19. t = 18

    K = 0fc19dc6 / W = 7da86405

    fe777bbf c2fbd9d1 21da9a9b b0fa238e cc899961 846ee454 8034229c 07590dcd
  20. t = 19

    K = 240ca1cc / W = 600003c6

    e1f20c33 fe777bbf c2fbd9d1 21da9a9b b0638179 cc899961 846ee454 8034229c
  21. t = 20

    K = 2de92c6f / W = 3e9d7b78

    9dc68b63 e1f20c33 fe777bbf c2fbd9d1 8ada8930 b0638179 cc899961 846ee454
  22. t = 21

    K = 4a7484aa / W = 0183fc00

    c2606d6d 9dc68b63 e1f20c33 fe777bbf e1257970 8ada8930 b0638179 cc899961
  23. t = 22

    K = 5cb0a9dc / W = 12dcbfdb

    a7a3623f c2606d6d 9dc68b63 e1f20c33 49f5114a e1257970 8ada8930 b0638179
  24. t = 23

    K = 76f988da / W = e2e2c38e

    c5d53d8d a7a3623f c2606d6d 9dc68b63 aa47c347 49f5114a e1257970 8ada8930
  25. t = 24

    K = 983e5152 / W = c8215c1a

    1c2c2838 c5d53d8d a7a3623f c2606d6d 2823ef91 aa47c347 49f5114a e1257970
  26. t = 25

    K = a831c66d / W = b73679a2

    cde8037d 1c2c2838 c5d53d8d a7a3623f 14383d8e 2823ef91 aa47c347 49f5114a
  27. t = 26

    K = b00327c8 / W = e5bc3909

    b62ec4bc cde8037d 1c2c2838 c5d53d8d c74c6516 14383d8e 2823ef91 aa47c347
  28. t = 27

    K = bf597fc7 / W = 32663c5b

    77d37528 b62ec4bc cde8037d 1c2c2838 edffbff8 c74c6516 14383d8e 2823ef91
  29. t = 28

    K = c6e00bf3 / W = 9d209d67

    363482c9 77d37528 b62ec4bc cde8037d 6112a3b7 edffbff8 c74c6516 14383d8e
  30. t = 29

    K = d5a79147 / W = ec8726cb

    a0060b30 363482c9 77d37528 b62ec4bc ade79437 6112a3b7 edffbff8 c74c6516
  31. t = 30

    K = 06ca6351 / W = 702138a4

    ea992a22 a0060b30 363482c9 77d37528 0109ab3a ade79437 6112a3b7 edffbff8
  32. t = 31

    K = 14292967 / W = d3b7973b

    73b33bf5 ea992a22 a0060b30 363482c9 ba591112 0109ab3a ade79437 6112a3b7
  33. t = 32

    K = 27b70a85 / W = 93f5997f

    98e12507 73b33bf5 ea992a22 a0060b30 9cd9f5f6 ba591112 0109ab3a ade79437
  34. t = 33

    K = 2e1b2138 / W = 3b68ba73

    fe604df5 98e12507 73b33bf5 ea992a22 59249dd3 9cd9f5f6 ba591112 0109ab3a
  35. t = 34

    K = 4d2c6dfc / W = aff4ffc1

    a9a7738c fe604df5 98e12507 73b33bf5 085f3833 59249dd3 9cd9f5f6 ba591112
  36. t = 35

    K = 53380d13 / W = f10a5c62

    65a0cfe4 a9a7738c fe604df5 98e12507 f4b002d6 085f3833 59249dd3 9cd9f5f6
  37. t = 36

    K = 650a7354 / W = 0a8b3996

    41a65cb1 65a0cfe4 a9a7738c fe604df5 0772a26b f4b002d6 085f3833 59249dd3
  38. t = 37

    K = 766a0abb / W = 72af830a

    34df1604 41a65cb1 65a0cfe4 a9a7738c a507a53d 0772a26b f4b002d6 085f3833
  39. t = 38

    K = 81c2c92e / W = 9409e33e

    6dc57a8a 34df1604 41a65cb1 65a0cfe4 f0781bc8 a507a53d 0772a26b f4b002d6
  40. t = 39

    K = 92722c85 / W = 24641522

    79ea687a 6dc57a8a 34df1604 41a65cb1 1efbc0a0 f0781bc8 a507a53d 0772a26b
  41. t = 40

    K = a2bfe8a1 / W = 9f47bf94

    d6670766 79ea687a 6dc57a8a 34df1604 26352d63 1efbc0a0 f0781bc8 a507a53d
  42. t = 41

    K = a81a664b / W = f0a64f5a

    df46652f d6670766 79ea687a 6dc57a8a 838b2711 26352d63 1efbc0a0 f0781bc8
  43. t = 42

    K = c24b8b70 / W = 3e246a79

    17aa0dfe df46652f d6670766 79ea687a decd4715 838b2711 26352d63 1efbc0a0
  44. t = 43

    K = c76c51a3 / W = 27333ba3

    9d4baf93 17aa0dfe df46652f d6670766 fda24c2e decd4715 838b2711 26352d63
  45. t = 44

    K = d192e819 / W = 0c4763f2

    26628815 9d4baf93 17aa0dfe df46652f a80f11f0 fda24c2e decd4715 838b2711
  46. t = 45

    K = d6990624 / W = 840abf27

    72ab4b91 26628815 9d4baf93 17aa0dfe b7755da1 a80f11f0 fda24c2e decd4715
  47. t = 46

    K = f40e3585 / W = 7a290d5d

    a14c14b0 72ab4b91 26628815 9d4baf93 d57b94a9 b7755da1 a80f11f0 fda24c2e
  48. t = 47

    K = 106aa070 / W = 065c43da

    4172328d a14c14b0 72ab4b91 26628815 fecf0bc6 d57b94a9 b7755da1 a80f11f0
  49. t = 48

    K = 19a4c116 / W = fb3e89cb

    05757ceb 4172328d a14c14b0 72ab4b91 bd714038 fecf0bc6 d57b94a9 b7755da1
  50. t = 49

    K = 1e376c08 / W = cc7617db

    f11bfaa8 05757ceb 4172328d a14c14b0 6e5c390c bd714038 fecf0bc6 d57b94a9
  51. t = 50

    K = 2748774c / W = b9e66c34

    7a0508a1 f11bfaa8 05757ceb 4172328d 52f1ccf7 6e5c390c bd714038 fecf0bc6
  52. t = 51

    K = 34b0bcb5 / W = a9993667

    886e7a22 7a0508a1 f11bfaa8 05757ceb 49231c1e 52f1ccf7 6e5c390c bd714038
  53. t = 52

    K = 391c0cb3 / W = 84badedd

    101fd28f 886e7a22 7a0508a1 f11bfaa8 529e7d00 49231c1e 52f1ccf7 6e5c390c
  54. t = 53

    K = 4ed8aa4a / W = c21462bc

    f5702fdb 101fd28f 886e7a22 7a0508a1 9f4787c3 529e7d00 49231c1e 52f1ccf7
  55. t = 54

    K = 5b9cca4f / W = 1487472c

    3ec45cdb f5702fdb 101fd28f 886e7a22 e50e1b4f 9f4787c3 529e7d00 49231c1e
  56. t = 55

    K = 682e6ff3 / W = b20f7a99

    38cc9913 3ec45cdb f5702fdb 101fd28f 54cb266b e50e1b4f 9f4787c3 529e7d00
  57. t = 56

    K = 748f82ee / W = ef57b9cd

    fcd1887b 38cc9913 3ec45cdb f5702fdb 9b5e906c 54cb266b e50e1b4f 9f4787c3
  58. t = 57

    K = 78a5636f / W = ebe6b238

    c062d46f fcd1887b 38cc9913 3ec45cdb 7e44008e 9b5e906c 54cb266b e50e1b4f
  59. t = 58

    K = 84c87814 / W = 9fe3095e

    ffb70472 c062d46f fcd1887b 38cc9913 6d83bfc6 7e44008e 9b5e906c 54cb266b
  60. t = 59

    K = 8cc70208 / W = 78bc8d4b

    b6ae8fff ffb70472 c062d46f fcd1887b b21bad3d 6d83bfc6 7e44008e 9b5e906c
  61. t = 60

    K = 90befffa / W = a43fcf15

    b85e2ce9 b6ae8fff ffb70472 c062d46f 961f4894 b21bad3d 6d83bfc6 7e44008e
  62. t = 61

    K = a4506ceb / W = 668b2ff8

    04d24d6c b85e2ce9 b6ae8fff ffb70472 948d25b6 961f4894 b21bad3d 6d83bfc6
  63. t = 62

    K = bef9a3f7 / W = eeaba2cc

    d39a2165 04d24d6c b85e2ce9 b6ae8fff fb121210 948d25b6 961f4894 b21bad3d
  64. t = 63

    K = c67178f2 / W = 12b1edeb

    506e3058 d39a2165 04d24d6c b85e2ce9 5ef50f24 fb121210 948d25b6 961f4894

NISTの途中計算例と照合できます。これは単一ブロックの教育用実装で、暗号ライブラリとしての利用やNIST認証を意味しません。検証ラボの対話操作では、引き続きブラウザ標準のWeb Cryptoを使います。 NIST — SHA-256 intermediate example

自分の文字列でSHA-256を試す

解析の限界

ハッシュは暗号化ではなく、復号鍵もありません。「同じハッシュを持つ異なる入力の組」を探す衝突探索、「指定されたハッシュになる入力」を探す原像探索、「指定された入力と同じハッシュになる別の入力」を探す第二原像探索を区別します。

理想化した古典計算モデルでは、汎用的な衝突探索は2¹²⁸回規模、原像探索は2²⁵⁶回規模が目安です。これはあらゆる入力や攻撃で必要な最低回数を証明したものではありません。第二原像の強度には元のメッセージ長の条件もあります。 NIST — Hash Functions / Security Strengths

公開研究の到達点と、このページの境界

2026年の研究は、段数を減らした35段SHA-256への実用的な衝突攻撃を報告しています。別のプレプリントは38段版への理論的攻撃を報告しています。後者の題名にある39段はSHA-512についての結果で、SHA-256の39段を破ったという意味ではありません。 IACR 2026/1080 — Pushing the Limit of Memory-efficient Collision Attack Framework for SHA-2 IACR 2026/1120 — Pushing Collision Attacks on SHA-2 to 39 Steps (preprint)

いずれも標準64段の実用的な解読を示す結果ではありません。今回確認した資料の範囲では、標準版の実用的な原像探索・衝突生成の成功を確認していません。これは将来も破られないという証明ではなく、調査範囲と確認日を限定した報告です。

編集部独自の解釈

ここからは理解のための見方です。新しい定理や安全性の証明ではありません。

素数は「重なった除外規則の残り」と見る

2の倍数、3の倍数、5の倍数……という除外は規則的です。ふるいでは各素数自身を残し、その倍数を除きます。個々の規則が周期的でも、重ね合わせた後の残りの間隔は一様ではありません。「規則がある」と「等間隔に並ぶ」を分けて考えると、素数の規則性と不規則さを同時に捉えられます。

SHA-256は「公開された作り方」と「探す難しさ」を分ける

素数から作る定数は誰でも再現できるレシピです。それを知ることは、狙った出力を作る入力の発見とは別の成果です。もし入力候補が最初から1,000個に限られていれば、最大1,000個をハッシュして一致を探せます。分かるのは「この候補が同じハッシュを持つ」ということ。探索範囲外まで含めた元入力の唯一性や、一般的な逆算方法は示しません。

私たちの結論:規則を知ること、候補を絞ること、答えを検証すること、未解決問題を解くこと。それぞれを別の達成として評価する。

根拠と再現方法

素数の一覧・判定・個数、SHA-256の定数と途中値は公開コードから再生成します。定数は浮動小数点の近似ではなく整数演算で求め、SHA-256の出力はNISTの既知値とNode.jsの暗号実装でテストします。有限のテストがアルゴリズム全体の安全性を証明するわけではありません。

この計算に使ったコードを読む
自分の環境で再現する手順を開く

上のコードをmath-analysis.mtsという名前で保存し、同じフォルダで以下を実行します。Node.js 22.23.0で動作確認済み。追加パッケージは不要です。素数の個数と、4入力のSHA-256を別の暗号実装と照合します。

node --experimental-strip-types --input-type=module -e '
import { strict as assert } from "node:assert";
import { createHash } from "node:crypto";
import { sha256Trace, primesUpTo } from "./math-analysis.mts";
assert.equal(primesUpTo(100).length, 25);
for (const text of ["", "abc", "素数", "a".repeat(55)]) {
  assert.equal(sha256Trace(text).digest,
    createHash("sha256").update(text).digest("hex"));
}
console.log("Prime count and 4 SHA-256 cases passed");
'
  1. AKS — PRIMES is in P
  2. Clay — Riemann’s 1859 Manuscript
  3. Clay — Riemann Hypothesis
  4. NIST — FIPS 180-4, §§4.2.2, 5, 6.2
  5. NIST — SHA-256 intermediate example
  6. NIST — Hash Functions / Security Strengths
  7. IACR 2026/1080 — Pushing the Limit of Memory-efficient Collision Attack Framework for SHA-2
  8. IACR 2026/1120 — Pushing Collision Attacks on SHA-2 to 39 Steps (preprint)
本館の編集方針を読む