すべて64ビット整数のうち、2つの32ビット整数の積であるものがわずか17%しか存在しない

2026/05/29 1:11

すべて64ビット整数のうち、2つの32ビット整数の積であるものがわずか17%しか存在しない

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

核心となるメッセージは、固定幅整数の乗算を数学的に逆算しようとするのは誤りであるということであり、それゆえに得られる積は均匀に分布していないことに起因している。具体的には、あらゆる可能な 64 ビットの値の中で、2 つの 32 ビット整数の積として表現できるものは約 17%(より小さな桁幅ではおよそ 20%)しかなく、ビット幅が増加するにつれてこの比率はゼロに近づく。8 ビット算術における具体的なオーバーフローの例として、127 × 127 = 16129 が 1 に切り捨てられることが示される。2 つの 32 ビット値を乗算するには 64 ビットの精度が必要であるが、素因数分解を用いない乗算の逆算を試みるアルゴリズムは、一般的なケースで失敗する。これは、ほぼすべての 64 ビット整数が 2 つの 32 ビット整数の積ではないためである。これは、一様分布を仮定しているにもかかわらず、予測可能な衝突を生み出すクリプティックな設計やハッシュ関数(例:“clhash"または単純な高/低分割)に対して決定的な影響を持つ。開発者は、直感的な乗算ベーススキームの脆弱性を認識し、操作を逆算する際には適切な因数分解手法を用いるべきである。

Text to translate

The core message is that reversing fixed-width integer multiplication is mathematically flawed because products are far from uniformly distributed: only about 17% of all possible 64-bit values can be expressed as the product of two 32-bit integers (roughly 20% for smaller widths), and this proportion approaches zero as bit width increases. A concrete overflow example shows that in 8-bit arithmetic, 127 × 127 = 16129 is truncated to 1. While multiplying two 32-bit values requires 64 bits of precision, algorithms that attempt to reverse multiplication without prime factorization will generally fail, since most 64-bit integers are not products of two 32-bit integers. This has critical implications for cryptographic designs and hash functions (e.g., “clhash” or simple high/low splits) that assume uniform distribution but instead produce predictable collisions. Developers should recognize the weakness of naive multiplication-based schemes and rely on proper factorization methods when reversing operations.

本文

2 つの 32 ビット整数の積として表現可能な 64 ビット値の割合について

完全な積(Full Product)の概念

  • ソフトウェアプログラミングにおいて、固定精度(例:8 ビット)で乗算を行うとオーバーフローが発生することがある。
    • 127 × 127 を 8 ビット無符号整数で計算すると結果は 1 になるが、正確な積は 16,129
  • この正確な積を「完全な積(full product)」と呼ぶ。
  • 一般的に、2 つの 32 ビット整数を掛け合わせると、その積は 64 ビット で表現される。

なぜこの比率が重要なのか?

  • 「すべての 64 ビット整数の中で、2 つの 32 ビット整数の積として表せるものの割合」がなぜ重要かについては、ハッシュ関数の設計における応用がある。
  • ハッシュ関数は入力からランダム性を確保した出力を生成する必要があるため、乗算特性を知ることは設計上重要である。
  • 著者は文字列に対して高速なハッシュ関数
    clhash
    を開発しており、同様の数学的知見が役立つことを示唆している。

暗号分野における乗算の採用

  • ハッシュ関数設計には、標準的な単純乗算に基づく技術との比較・優位性を示す目的で、特定の乗算手法が用いられる。
  • 32 ビット整数に対する簡易なハッシュ関数の例:
    • 下位 16 ビットと上位 16 ビットの積を計算する設計。
// simpleHighLowHash は 32 ビットの簡易的でありながら弱いハッシュ関数です。
// これは上位 16 ビットと下位 16 ビットの積を計算します。
func simpleHighLowHash(x uint32) uint32 {
    high := uint16(x >> 16)
    low := uint16(x & 0xFFFF)
    return uint32(high) * uint16(low)
}

ハッシュ出力の一様性に関する理論的背景

  • 理想的にはハッシュ出力は一様(すべての値が等確率で出現)でありたい。
  • しかし、単純な積計算では全ての 32 ビット値を生成することはできない。
  • エルディシュの定理:
    • $n$ ビットの積として生成可能な値の割合は、$n$ が大きくなるにつれて 0 に収束する。
    • 例:$10^7$ ビットの整数同士を掛けると、期待される出力空間の中では実現可能なものが非常に少ない。

現実的なケース(32 ビット × 32 ビット → 64 ビット)での比率的分析

小さなデータサイズにおける結果

  • 16 ビット × 16 ビット → 32 ビット の場合:
    • 全探索(Brute-force)で容易に計算可能。
    • 生成される 32 ビット整数のうち、約 5 つに 1 つ20%)のみが積として表現可能。
    • 残りの 80% はこの手法では決して生成されない。

32 ビット × 32 ビットの場合の困難さ

  • 全探索を行うと計算量が指数関数的に増大するため、実質的に不可能。
  • 以下の関数は、32 ビット整数同士を掛けて 64 ビット値を得る簡易な例:
func simpleHighLowHash(x uint64) uint64 {
    high := uint32(x >> 32)
    low := uint32(x & 0xFFFFFFFF)
    return uint64(high) * uint64(low)
}

正確な割合の算出結果

  • ウエストバー氏(Westerborg)らの研究により、数式的アプローチで正確な値が計算可能。

  • 結論: 2 つの 32 ビット整数の積として表現可能な 64 ビット無符号整数の総数は以下の通り。

    3,215,709,724,700,470,902

  • これは、すべての可能な 64 ビット値のうち約 17% に相当する。

積から元の因数を復元する問題

復元の手法(素因数分解を利用)

与えられた積 $N$ から、元の 2 つの 32 ビット整数 $(a, b)$ を見つける手順:

  1. 完全な素因数分解を行う。
  2. 素数因子を利用して、厳密に $2^{32}$ より小さい全ての可能な除数を構築する。
    • 重複のない素数因子とその冪ごとに処理する。
    • システム的に候補集合を更新し、$2^{32}$ を超えない積のみを残す。
  3. 生成された候補の中で最大の値 $m$ を選ぶ。
  4. それに応じて残りを計算 ($n/m$) し、適切な分割が存在するかを確認する。

注意: 解は一般に一意ではないが、本実装では「どちらかの値が最大化されるような対」を返す。

Python による実装例(簡易ロジック)

# 素数因子 f とその冪 multiplicities を用いて候補を作成
for p in factor_multiplicities:
    new_candidates = []
    for c in candidates:
        for i in range(factor_multiplicities[p] + 1):
            if c * (p ** i) < 2**32:
                new_candidates.append(c * (p ** i))
    for new_c in new_candidates:
        candidates.append(new_c)

m = max(candidates)
print(f"Maximum candidate: {m}")
leftover = n // m
print(f"Leftover: {leftover}")

if leftover >= 2**32:
    print("左残りは大きすぎます。適切な候補は見つかりません。")

結論:大多数の値は積として表せない

  • ランダムに選ばれた 64 ビット整数を、2 つの 32 ビット整数の積として表現しようとした場合、ほぼ間違いなく「該当しない」という結果になる。
  • すべての 64 ビット整数のほとんどが、単純な 2 つの 32 ビット整数の積として表せるわけではないという事実を理解することが重要である。

同じ日のほかのニュース

一覧に戻る →

2026/06/02 1:31

最新のインスタグラムの「 exploits(バグ)」で最もユニークなのは私がこれまでに見た中で一番奇妙なものです。

## 日本語翻訳: 洗練されたセキュリティ上の不備により、ハッカーらは警報を触発することなく Instagram のアカウントを乗っ取り、@obamawhitehouse や @ocmssf のような高価値なユーザー名を対象に Meta の「Takeover Flow」を利用した。攻撃者は被害者のユーザー名を使用してプロセスを開始し、VPN または代理サーバーを介して請求をアカウントの報告された都市の近くから経路化することで、位置情報に基づくセキュリティを回避した。彼らは Meta の AI サポートチャットボットに連絡し、アカウントが侵害されたことをごりごしくれ、検証コードを受信するメールアドレスを任意で指定することを要求した。Instagram のシステムは、この要求されたメールアドレスが以前にそのアカウントと関連付けられていたかどうかを検証しなかった。AI がコードを送信すると、それはパスワードリセットリンクのトリガーとしての検証に使われ、完全な所有権が付与された。Meta のサポート AI はビデオでの自己撮影(生真面目)を身分証明として要求する可能性があるが、ターゲットのフィードから単純に AI でアニメーション化された公開写真は、このチェックを成功裡に回避した。回復フローは、そのリクエストを「本当の」所有者による完全なアカウントリセットとして扱い、2FA を完全に回避し、メール、テキスト、またはプッシュ通知を触発することなく進んだ。正当なユーザーのセッションは沈黙的に破棄され、連絡先情報が攻撃者の情報で置換されたため、標準的なチャネルでの回復は不可能になった。ブラックマーケットの Telegram グループが「アカウント乗っ取り」サービスを提供し始め、高価値なハンドルを利活用した。この脆弱性は数週間、あるいは数ヶ月間 Meta が修復するまで稼働していたと報告されており、その地下市場は一瞬で消え失せた。実験的な AI サポートグループに参加しているユーザーは、自動化されたアシスタンスを手動で無効化できないため、引き続き曝されている。この事象は、将来的な回復プロセスが人工知能や位置情報に基づく回避技術によって容易に操作されるのを防ぐためには、自動的なりすましおよびリモートスプーフィング攻撃に対するより強力な検証プロトコルの強化を強く示唆している。

2026/06/02 5:40

デバッグプロジェクト

## 日本語訳: Debug は、地球上で最も致命的な動物の一つである*Aedes aegypti*蚊の個体群を安全に抑制し、デング熱、ジカ熱、黄熱病、チクングニア熱といった致死性の疾患に対する革命的な対策を開拓しています。化学物質や遺伝子改変に依存する従来のアプローチとは異なり、当社の技術は自然存在する細菌*Wolbachia*を運ぶ雄性不稔の雌蚊を放出します。この生物は、これらの雄蚊が野生の雌蚊と繁殖することを妨げ、毒物を導入することなく個体群を自然に減少させます。吸血せず病気を媒介しない雄蚊であるため、「良い虫」としてこれを放出することは、立ち枯れた水の撤去や効果低下しつつ毒性が強まり過ぎる殺虫剤の使用といった陳腐な手法の持続可能な代替手段を提供します。現在、ほとんどの蚊媒感染症には効果的なワクチンがないことを考慮すると、この解決策は不可欠な新たなアプローチとなります。科学専門知識を国際パートナーと組み合わせ、Debug は地域コミュニティおよび政府との協力のもとで放出規模の拡大を目指しています。その最終的な影響は大きいです:刺す蚊の数を減らして病気の伝播率を下げ、安全でスケーラブルな生物学的制御戦略を通じて数百万人の人々がより長く健康な生活を送るのを支援します。 ## 元テキスト: ## Summary: Debug is pioneering a revolutionary method to combat deadly diseases like dengue, Zika, yellow fever, and chikungunya by safely suppressing populations of *Aedes aegypti* mosquitoes, which are among the deadliest animals on Earth. Unlike traditional approaches relying on chemicals or genetic modification, their technology releases sterile male mosquitoes carrying the natural bacterium *Wolbachia*. This organism prevents these males from reproducing with wild female counterparts, naturally causing population decline without introducing toxins. Since male mosquitoes do not bite or spread disease, releasing these "good bugs" offers a sustainable alternative to outdated methods like clearing standing water and using pesticides that are losing efficacy or becoming too toxic. Given that most mosquito-borne illnesses currently lack effective vaccines, this solution provides a vital new approach. By leveraging scientific expertise alongside international partners, Debug aims to scale up releases in collaboration with local communities and governments. The ultimate impact is significant: reducing biting mosquitoes to lower disease transmission rates, thereby helping millions of people live longer, healthier lives through a safe and scalable biological control strategy.

2026/06/02 1:41

スタンフォード大学CS336コース用 AI エージェントガイドライン

## 日本語翻訳: 本ドキュメントは、スタンフォード大学の CS336 コースにおいて AI コーディングアシスタントが従う厳格な倫理的境界線を設定する:すなわち、これらは何らかのコードを書いたり課題を直接解決したりしてはならない。むしろ、これらのエージェントは、学生による学習体験を維持することを目的とした教学補助手段としてのみ機能すべきである。本コースが手動作業としての Python と PyTorch の実装に大きく依存し、かつ支援枠組みが限られていることを考慮すると、AI の主たる役割は、公式の講義資料とデバッグツールの活用を通じて背後にある理論を説明し、エッジケースにおけるロジックを検証し、学生を導くことにある。 ユーザーから直接の修正、TODO 節の完了、またはリポジトリへの編集といった要請を受けた場合、エージェントはその要求を拒否し、概念の説明や、shape アサーションやアブレーションなどの健全性チェックを提案することで方向転換しなければならない。この方針は、学生がトラン스포ーマー、最適化アルゴリズム、トレーニングループなど複雑なコンポーネントの習得という核心的学習目標を回避することを防止するものである。システムはこの方針を強制するためには、明確な質問を投げかけ、公式ドキュメントを参照し、単に「如何做るか」を届けるのではなく、技術的決定の背後にある「なぜか」を説明することで、デバッグと概念的理解を通じて真の能力を確保するよう求める。

すべて64ビット整数のうち、2つの32ビット整数の積であるものがわずか17%しか存在しない | そっか~ニュース