區分 x25519 公鑰和隨機密鑰?
我最近閱讀了一個避免以明文形式發送臨時 x25519 密鑰的協議,以阻止深度數據包檢查。
我知道 x25519 公鑰實際上是 255 位,必須將其序列化為 256 位,留下一個未使用的位,庫通常將其固定為 0。出於這個問題的目的,我想忽略這個並專注於 255用過的位。
Alice 生成一個隨機私鑰 K 和 255 位公鑰 K’。她生成 R,一個 255 位的隨機字元串。她擲出一枚公平的硬幣,如果是正面,她發送消息 M = K’。否則,她發送 M = R。
Eve 收到這個消息並且不知道 K。她必須猜測是否 M = K’。她能比她通過猜測獲得的 50% 成功率更好地做到這一點嗎?(換句話說,她能區分 x25519 公鑰的有效位和隨機數嗎?)
編輯:在回答問題時,Eve 了解曲線參數。
Weierstrass 形式的橢圓曲線的有效點滿足方程
$$ y^2 = x^3 + ax + b,. $$ 我們可以將其重寫為 $ y = \pm \sqrt{x^3 + ax + b} $ ,當有兩種解決方案時 $ x^3 + ax + b $ 是一個正方形,1 解時 $ x^3 + ax + b = 0 $ , 或 0 解決方案時 $ x^3 + ax + b $ 不是正方形。 在 X25519 中,我們只看到 $ x $ 座標,但我們仍然可以利用上面的。曲線方程為
$$ y^2 = x^3 + 486662x^2 + x \bmod 2^{255}-19,, $$ 我們從中得到了一個有效的公鑰 $ x $ , $ x^3 + 486662x^2 + x $ 必須有一個平方根模 $ 2^{255}-19 $ . 另一方面,隨機字元串將只是一個正方形 $ 1/2 $ 的時間。通過檢查 $ n $ 候選公鑰,我們可以提高我們的確定性 $ 1 - 1/2^n $ .