素数の答え
素数とは、正の約数が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, 7。91 = 7 × 13
素数: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桁)
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad1. 入力と補完
入力バイトは616263。最初の語W[0]は61626380、最後の語W[15]は00000018です。80は区切りの1ビットに続くゼロ、18は24の16進表記です。 NIST — SHA-256 intermediate example
2. 16語から64語を作り、64段を計算
各段は、8個の作業変数a〜h、メッセージから作る語W[t]、定数K[t]を使って状態を更新します。下の詳細は各段が終わった直後の状態です。
3. 最後の状態に初期値を加算
第64段の8語へ初期値の8語を、それぞれ2³²を法として加えます。これを順に連結すると上のハッシュになります。最後の作業変数をそのまま並べた値ではありません。
補完・定数・全64段の計算記録を開く
補完後の512ビット
61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018初期値 H[0]〜H[7]
6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19tは仕様と同じ0〜63。各行は更新後のa〜hです。
t = 0
K = 428a2f98 / W = 61626380
5d6aebcd 6a09e667 bb67ae85 3c6ef372 fa2a4622 510e527f 9b05688c 1f83d9abt = 1
K = 71374491 / W = 00000000
5a6ad9ad 5d6aebcd 6a09e667 bb67ae85 78ce7989 fa2a4622 510e527f 9b05688ct = 2
K = b5c0fbcf / W = 00000000
c8c347a7 5a6ad9ad 5d6aebcd 6a09e667 f92939eb 78ce7989 fa2a4622 510e527ft = 3
K = e9b5dba5 / W = 00000000
d550f666 c8c347a7 5a6ad9ad 5d6aebcd 24e00850 f92939eb 78ce7989 fa2a4622t = 4
K = 3956c25b / W = 00000000
04409a6a d550f666 c8c347a7 5a6ad9ad 43ada245 24e00850 f92939eb 78ce7989t = 5
K = 59f111f1 / W = 00000000
2b4209f5 04409a6a d550f666 c8c347a7 714260ad 43ada245 24e00850 f92939ebt = 6
K = 923f82a4 / W = 00000000
e5030380 2b4209f5 04409a6a d550f666 9b27a401 714260ad 43ada245 24e00850t = 7
K = ab1c5ed5 / W = 00000000
85a07b5f e5030380 2b4209f5 04409a6a 0c657a79 9b27a401 714260ad 43ada245t = 8
K = d807aa98 / W = 00000000
8e04ecb9 85a07b5f e5030380 2b4209f5 32ca2d8c 0c657a79 9b27a401 714260adt = 9
K = 12835b01 / W = 00000000
8c87346b 8e04ecb9 85a07b5f e5030380 1cc92596 32ca2d8c 0c657a79 9b27a401t = 10
K = 243185be / W = 00000000
4798a3f4 8c87346b 8e04ecb9 85a07b5f 436b23e8 1cc92596 32ca2d8c 0c657a79t = 11
K = 550c7dc3 / W = 00000000
f71fc5a9 4798a3f4 8c87346b 8e04ecb9 816fd6e9 436b23e8 1cc92596 32ca2d8ct = 12
K = 72be5d74 / W = 00000000
87912990 f71fc5a9 4798a3f4 8c87346b 1e578218 816fd6e9 436b23e8 1cc92596t = 13
K = 80deb1fe / W = 00000000
d932eb16 87912990 f71fc5a9 4798a3f4 745a48de 1e578218 816fd6e9 436b23e8t = 14
K = 9bdc06a7 / W = 00000000
c0645fde d932eb16 87912990 f71fc5a9 0b92f20c 745a48de 1e578218 816fd6e9t = 15
K = c19bf174 / W = 00000018
b0fa238e c0645fde d932eb16 87912990 07590dcd 0b92f20c 745a48de 1e578218t = 16
K = e49b69c1 / W = 61626380
21da9a9b b0fa238e c0645fde d932eb16 8034229c 07590dcd 0b92f20c 745a48det = 17
K = efbe4786 / W = 000f0000
c2fbd9d1 21da9a9b b0fa238e c0645fde 846ee454 8034229c 07590dcd 0b92f20ct = 18
K = 0fc19dc6 / W = 7da86405
fe777bbf c2fbd9d1 21da9a9b b0fa238e cc899961 846ee454 8034229c 07590dcdt = 19
K = 240ca1cc / W = 600003c6
e1f20c33 fe777bbf c2fbd9d1 21da9a9b b0638179 cc899961 846ee454 8034229ct = 20
K = 2de92c6f / W = 3e9d7b78
9dc68b63 e1f20c33 fe777bbf c2fbd9d1 8ada8930 b0638179 cc899961 846ee454t = 21
K = 4a7484aa / W = 0183fc00
c2606d6d 9dc68b63 e1f20c33 fe777bbf e1257970 8ada8930 b0638179 cc899961t = 22
K = 5cb0a9dc / W = 12dcbfdb
a7a3623f c2606d6d 9dc68b63 e1f20c33 49f5114a e1257970 8ada8930 b0638179t = 23
K = 76f988da / W = e2e2c38e
c5d53d8d a7a3623f c2606d6d 9dc68b63 aa47c347 49f5114a e1257970 8ada8930t = 24
K = 983e5152 / W = c8215c1a
1c2c2838 c5d53d8d a7a3623f c2606d6d 2823ef91 aa47c347 49f5114a e1257970t = 25
K = a831c66d / W = b73679a2
cde8037d 1c2c2838 c5d53d8d a7a3623f 14383d8e 2823ef91 aa47c347 49f5114at = 26
K = b00327c8 / W = e5bc3909
b62ec4bc cde8037d 1c2c2838 c5d53d8d c74c6516 14383d8e 2823ef91 aa47c347t = 27
K = bf597fc7 / W = 32663c5b
77d37528 b62ec4bc cde8037d 1c2c2838 edffbff8 c74c6516 14383d8e 2823ef91t = 28
K = c6e00bf3 / W = 9d209d67
363482c9 77d37528 b62ec4bc cde8037d 6112a3b7 edffbff8 c74c6516 14383d8et = 29
K = d5a79147 / W = ec8726cb
a0060b30 363482c9 77d37528 b62ec4bc ade79437 6112a3b7 edffbff8 c74c6516t = 30
K = 06ca6351 / W = 702138a4
ea992a22 a0060b30 363482c9 77d37528 0109ab3a ade79437 6112a3b7 edffbff8t = 31
K = 14292967 / W = d3b7973b
73b33bf5 ea992a22 a0060b30 363482c9 ba591112 0109ab3a ade79437 6112a3b7t = 32
K = 27b70a85 / W = 93f5997f
98e12507 73b33bf5 ea992a22 a0060b30 9cd9f5f6 ba591112 0109ab3a ade79437t = 33
K = 2e1b2138 / W = 3b68ba73
fe604df5 98e12507 73b33bf5 ea992a22 59249dd3 9cd9f5f6 ba591112 0109ab3at = 34
K = 4d2c6dfc / W = aff4ffc1
a9a7738c fe604df5 98e12507 73b33bf5 085f3833 59249dd3 9cd9f5f6 ba591112t = 35
K = 53380d13 / W = f10a5c62
65a0cfe4 a9a7738c fe604df5 98e12507 f4b002d6 085f3833 59249dd3 9cd9f5f6t = 36
K = 650a7354 / W = 0a8b3996
41a65cb1 65a0cfe4 a9a7738c fe604df5 0772a26b f4b002d6 085f3833 59249dd3t = 37
K = 766a0abb / W = 72af830a
34df1604 41a65cb1 65a0cfe4 a9a7738c a507a53d 0772a26b f4b002d6 085f3833t = 38
K = 81c2c92e / W = 9409e33e
6dc57a8a 34df1604 41a65cb1 65a0cfe4 f0781bc8 a507a53d 0772a26b f4b002d6t = 39
K = 92722c85 / W = 24641522
79ea687a 6dc57a8a 34df1604 41a65cb1 1efbc0a0 f0781bc8 a507a53d 0772a26bt = 40
K = a2bfe8a1 / W = 9f47bf94
d6670766 79ea687a 6dc57a8a 34df1604 26352d63 1efbc0a0 f0781bc8 a507a53dt = 41
K = a81a664b / W = f0a64f5a
df46652f d6670766 79ea687a 6dc57a8a 838b2711 26352d63 1efbc0a0 f0781bc8t = 42
K = c24b8b70 / W = 3e246a79
17aa0dfe df46652f d6670766 79ea687a decd4715 838b2711 26352d63 1efbc0a0t = 43
K = c76c51a3 / W = 27333ba3
9d4baf93 17aa0dfe df46652f d6670766 fda24c2e decd4715 838b2711 26352d63t = 44
K = d192e819 / W = 0c4763f2
26628815 9d4baf93 17aa0dfe df46652f a80f11f0 fda24c2e decd4715 838b2711t = 45
K = d6990624 / W = 840abf27
72ab4b91 26628815 9d4baf93 17aa0dfe b7755da1 a80f11f0 fda24c2e decd4715t = 46
K = f40e3585 / W = 7a290d5d
a14c14b0 72ab4b91 26628815 9d4baf93 d57b94a9 b7755da1 a80f11f0 fda24c2et = 47
K = 106aa070 / W = 065c43da
4172328d a14c14b0 72ab4b91 26628815 fecf0bc6 d57b94a9 b7755da1 a80f11f0t = 48
K = 19a4c116 / W = fb3e89cb
05757ceb 4172328d a14c14b0 72ab4b91 bd714038 fecf0bc6 d57b94a9 b7755da1t = 49
K = 1e376c08 / W = cc7617db
f11bfaa8 05757ceb 4172328d a14c14b0 6e5c390c bd714038 fecf0bc6 d57b94a9t = 50
K = 2748774c / W = b9e66c34
7a0508a1 f11bfaa8 05757ceb 4172328d 52f1ccf7 6e5c390c bd714038 fecf0bc6t = 51
K = 34b0bcb5 / W = a9993667
886e7a22 7a0508a1 f11bfaa8 05757ceb 49231c1e 52f1ccf7 6e5c390c bd714038t = 52
K = 391c0cb3 / W = 84badedd
101fd28f 886e7a22 7a0508a1 f11bfaa8 529e7d00 49231c1e 52f1ccf7 6e5c390ct = 53
K = 4ed8aa4a / W = c21462bc
f5702fdb 101fd28f 886e7a22 7a0508a1 9f4787c3 529e7d00 49231c1e 52f1ccf7t = 54
K = 5b9cca4f / W = 1487472c
3ec45cdb f5702fdb 101fd28f 886e7a22 e50e1b4f 9f4787c3 529e7d00 49231c1et = 55
K = 682e6ff3 / W = b20f7a99
38cc9913 3ec45cdb f5702fdb 101fd28f 54cb266b e50e1b4f 9f4787c3 529e7d00t = 56
K = 748f82ee / W = ef57b9cd
fcd1887b 38cc9913 3ec45cdb f5702fdb 9b5e906c 54cb266b e50e1b4f 9f4787c3t = 57
K = 78a5636f / W = ebe6b238
c062d46f fcd1887b 38cc9913 3ec45cdb 7e44008e 9b5e906c 54cb266b e50e1b4ft = 58
K = 84c87814 / W = 9fe3095e
ffb70472 c062d46f fcd1887b 38cc9913 6d83bfc6 7e44008e 9b5e906c 54cb266bt = 59
K = 8cc70208 / W = 78bc8d4b
b6ae8fff ffb70472 c062d46f fcd1887b b21bad3d 6d83bfc6 7e44008e 9b5e906ct = 60
K = 90befffa / W = a43fcf15
b85e2ce9 b6ae8fff ffb70472 c062d46f 961f4894 b21bad3d 6d83bfc6 7e44008et = 61
K = a4506ceb / W = 668b2ff8
04d24d6c b85e2ce9 b6ae8fff ffb70472 948d25b6 961f4894 b21bad3d 6d83bfc6t = 62
K = bef9a3f7 / W = eeaba2cc
d39a2165 04d24d6c b85e2ce9 b6ae8fff fb121210 948d25b6 961f4894 b21bad3dt = 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");
'- AKS — PRIMES is in P
- Clay — Riemann’s 1859 Manuscript
- Clay — Riemann Hypothesis
- NIST — FIPS 180-4, §§4.2.2, 5, 6.2
- NIST — SHA-256 intermediate example
- NIST — Hash Functions / Security Strengths
- 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)