橢圓曲線密碼學是下一代的公鑰密碼學,它比之前的公鑰密碼學系統例如rsa和diffe-hellman在安全性方面有顯著提高。橢圓曲線密碼學是目前被廣泛使用的最強大的密碼學演算法之一,但是真正理解其工作原理的開發者並不多。
橢圓曲線有一系列滿足特定數學方程的點組成。乙個橢圓曲線的方程看起來像這樣:
y² = x³ + ax + b
也有其他的橢圓曲線表示式,從技術上來將,乙個橢圓曲線就是由滿足上述方程的點組成,它的一些固有的特徵使其非常適合用於密碼學。
上面的曲線有很多有趣的特性,其中之一就是水平對稱性。橢圓曲線上的任何乙個點關於x軸的對稱點依然還在曲線上。另乙個更有意思的特性是,任何一條不垂直於x軸的直線與橢圓曲線的交點不會超過3個。假設我們從橢圓曲線上任選兩個點畫一條直線,那麼這條直線將在第三個點與橢圓曲線相交。
可以把這個過程想象成乙個撞球遊戲,如果你在a點拿乙個球向b點射擊,當這個球碰到曲線後,就會彈向下方(如果球在x軸上方)或上方(如果球在x軸下方),就像下面這張**:
如果將撞球在這兩點上的運動稱為dot運算,那麼橢圓曲線上任何兩點都可以進行dot運算:
a dot b = c
a dot a = b
a dot c = d
假設乙個人自己在屋裡玩撞球,他可以按照上面的規則一遍遍的擊球,過一會兒進來另乙個人看到了撞球的當前位置,那麼即使他知道遊戲規則以及開始時球的位置,也無法確定到底擊打了多少次球。唯一的辦法就是自己重玩遊戲並試著讓球到達同樣的位置。
我們看到的橢圓曲線是乙個簡化版本,它對於解釋橢圓曲線的工作原理很有幫助,不過和密碼學中實際用到的曲線還有比較大的差距。
將橢圓曲線用於密碼學需要首先將取值範圍限定到有限區間,就像rsa裡那樣,我們只允許乙個固定區間內的整數,如果數值超過了這個區間的最大值,就取模。如果我們選擇乙個素數作為區間最大值,那麼這個橢圓曲線就被稱為素數曲線並同時具有了令人難以置信的密碼學特性。
雖然上圖看起來不像傳統意義上的曲線,它的確是,它是原始的橢圓曲線被限定在指定的區間內並且取整的結果,你能看到關於x軸的對稱性依然存在。
回到我們的撞球遊戲,前面的dot運算對這個離散曲線依然適用。曲線上的直線方程依然也還有同樣的性值。更令人激動的是離散曲線上的dot運算可以更高效的計算。當兩點連成的直線碰到邊界後會轉到另一邊繼續前進,直到碰到乙個點:
有了這些新的工具,我們可以進行一些密碼學操作了。假設你有一條訊息,將其設為x座標,然後求出來曲線上對應點的y座標。
輸出就是 : (71, 6), 「-」, (78, 44), (80, 4), 64, 24)
橢圓曲線離散對數是乙個難題,這是橢圓曲線密碼學的根基。雖然已經三個世紀的數學研究,目前還沒有找到什麼演算法可以比原始求解更有效。和素數分解不同,基於目前的數學知識,不存在可以縮小門限函式差距的捷徑。這意味著對於相同大小的數值,求解橢圓曲線離散對數要遠遠難於素數分解,這也意味著橢圓曲線密碼學系統要比rsa或diffe-hellman更難攻破。
適用橢圓曲線密碼學,你可以用較小的金鑰獲得同樣的安全等級。小金鑰變得越來越重要,尤其是今天有越來越多的密碼學計算是在手機和iot裝置之類的不那麼強大的裝置上執行的。
密碼學中的橢圓曲線
密碼學中的橢圓曲線 密碼學中的橢圓曲線不是定義在是實數域上的,我們要把橢圓曲線定義在有限域上 顧名思義,有限域是一種只有由有限個元素組成的域 域的概念是從我們的有理數,實數的運算中抽象出來的,嚴格的定義請參考近世代數方面的數。簡單的說,域中的元素同有理數一樣,有自己得加法 乘法 除法 單位元 1 零...
現代密碼學之橢圓曲線ECC
橢圓曲線乘法 橢圓曲線結合 elgamal cryptosystem計算例子展示 手算帶步驟 判斷乙個橢圓曲線上有幾個點 reference ecc是由victor miller and neal koblitz1985引入的。對於dsa,rsa,我們需要很大的金鑰長度,而ecc只需要特別餓小的金鑰...
橢圓曲線密碼系統 橢圓曲線
1 橢圓曲線 在這裡,橢圓曲線簡化為用 y2 x3 ax b表示的點的集合。將其離散化後,得到 y2 mod p x3 ax b mod p 2 群數學中的 群 是乙個由我們定義了一種二元運算的集合,二元運算我們稱之為 加法 並用符號 來表示。為了讓乙個集合g成為群,必須定義加法運算並使之具有以下四...