本文是關於橢圓曲線加密的非常基礎的介紹。內容雖然基礎,但對於橢圓曲線加密的門外漢來說,簡單易懂,適合於初學者。

原文標題:《一文讀懂橢圓曲線加密學》
作者:Lane Wager
翻譯:王澤龍

這是一篇橢圓曲線密碼學的基本介紹。我假設本文的絕大多數讀者來這裏的目的是:瞭解爲什麼橢圓曲線加密是一種有效的加密工具,以及它爲什麼有效。我試圖用通俗的方式來解釋它,我將跳過論證與實現的細節,轉而聚焦在其運行原則上。

橢圓曲線加密與陷門函數,比特幣背後的密碼學橢圓曲線示例

它是做什麼的?

橢圓曲線加密是一種加密數據方法,只有特定人,才能對其進行解密。它在現實生活中有許多應用場景,但其主要應用在於加密互聯網上的數據與流量。例如,橢圓加密曲線可以用於確保一封郵件何時發送,且除了收件人外無人可以讀取該郵件。

橢圓曲線加密是公鑰加密技術

公鑰加密風情萬千,橢圓曲線加密只是其中一種風味。其他加密算法還有 RSA,DiffieHelman,等等。我將簡單交代公鑰加密的大體背景作爲開頭,進而展開我們後續的闡述,以此更深入理解橢圓曲線加密。有空時,你可以花些時間深入研究公鑰密碼學知識。

如下圖所示,公鑰加密允許以下過程發生 :

橢圓曲線加密與陷門函數,比特幣背後的密碼學

上圖展示了兩個鑰匙,一個公鑰和一個私鑰。這些密鑰用於加密和解密數據,這使得世界上的任何人都可以在傳輸時看到加密數據,但無法讀取信息。

讓我們假設 Fcebook 將收到來自特朗普的私密貼。Facebook 需要能夠確保特朗普通過網絡發文時,沒人(包括 NSA 或互聯網服務供應商)可在其中閱讀該消息。使用公鑰加密後,整個數據傳輸過程呈現如下狀態 :

l 特朗普告知 Facebook 他將向後者發送一篇私密帖

l Facebook 將其公鑰發送給特朗普

l 特朗普使用公鑰加密其帖子:

“我喜愛福克斯(Fox)與朋友們”+公鑰 =“s80s1s9sadjds9s”

l 特朗普只把加密後的信息發送給 Facebook

l Facebook 使用他們的私鑰解密消息:

“s80s1s9sadjds9s” +私鑰 =“我喜愛福克斯(Fox)與朋友們”

如你所見,這是一項非常有用的技術。以下是其中的一些要點:

l 公鑰可發送給任何人,它是公開的

l 私鑰必須被妥善保管,因爲如果某人獲取了私鑰,他們便可以解密信息

l 計算機可以迅速地用公鑰來加密消息,並用私鑰來解密消息

l 如果沒有私鑰,計算機可能需要花費極長的時間(數百萬年)來破解加密後的消息

它是怎樣運作的:陷門函數

所有公鑰加密算法的關鍵在於它們各自都有其獨特的陷門函數。陷門函數只能被單向計算,或者至少只能容易地單向計算(使用現代計算機在不到幾百萬年的時間內)

不是陷門函數:A+B=C

如果被給到 A 與 B,我就可以算出 C。問題是如果我被給到 B 與 C,我也可以算出 A。並非是陷門函數。

陷門函數:

“我喜愛福克斯(Fox)與朋友們”+公鑰 =“s80s1s9sadjds9s”

如果我被給到“我喜愛福克斯(Fox)與朋友們”+公鑰 , 我可以得出“s80s1s9sadjds9s”,但是如果我被給到“s80s1s9sadjds9s”與公鑰,那我無法得出信息:“我愛福克斯(Fox)與朋友們”。

在 RSA (可能是最流行的公鑰系統)中,陷門函數主要取決於將大數字納入其主要因子的難度。

公鑰:944,871,836,856,449,473

私鑰:961,748,941 and 982,451,653

在以上的例子中,公鑰是一個非常大的數字,私鑰是公鑰的兩個主要因子。這是陷門函數的一個好的例子,因爲在私鑰中很容易將多個數字相乘以獲取公鑰,但如果你擁有的只是公鑰,那將花費一臺電腦很長的時間才能重建私鑰。

注意 : 在真實的加密中,私鑰需要 200+位數以上的長度以確保安全。

是什麼讓橢圓曲線加密與衆不同

人們使用橢圓曲線加密的理由跟 RSA 完全相同。它生成公私鑰對並允許兩方安全溝通。然而,橢圓曲線加密有一勝過 RSA 的優勢。橢圓曲線加密中 256 位數的密鑰所提供的安全性與 RSA 算法中 3072 位數密鑰所提供的安全性相同。這意味着在資源有限的系統中,如智能手機、嵌入式電腦、加密網絡,橢圓曲線加密相較於 RSA 加密算法,它使用的硬盤空間和帶寬不到 RSA 算法的 10%。

(譯註:也就是說,橢圓曲線加密比 RSA 算法在資源有限的情況下,更省資源,可行性更高。)

橢圓曲線加密的陷門函數

這可能是絕大多數讀者閱讀本文的原因。這是橢圓曲線加密有別於 RSA 加密算法的部分,也是它的特殊之處。陷門函數類似於池中的數學遊戲。我們從曲線上的某一點開始。我們使用一個“點函數”(dot function)來發現一個新的點。不斷重複“點函數”並圍繞曲線跳躍(hop),直到我們最終抵達最後一個點上。讓我們看看以下整個算法。
橢圓曲線加密與陷門函數,比特幣背後的密碼學
l 從 A 點開始;

l A 點 B=-C (從 A 到 B 點畫一條線並最終落在-C 點)

l 從-C 到 C 跨 X 軸反射;

l A 點 C=-D (從 A 點向 C 點畫一條線並最終落在-D)

l 從-D 到 D 跨 X 軸反射;

l A 點 D=-E (從 A 向 D 畫一條線並最終落在-E)

l 從-E 到 E 跨 X 軸反射

這是一個偉大的陷門函數,因爲如果你知道哪裏是起點(A)以及需要多少跳才能達到終點 E,那麼找到終點會很容易。從另一方面來說,如果你知道的只是起點與終點的位置,那麼,要發現需要多少跳才能抵達終點幾乎是不可能的。

公鑰:起點 A,終點 E;

私鑰:從 A 到 E 的跳數

有問題嗎 ?

以下是我初次瞭解橢圓曲線加密時所產生的相關問題。希望我能妥善地解決它們。

如何發現第二點?如果點函數(dot function)只是在兩點之間畫一條線,難道不需要第二點來幫助開始嗎 ?

回答:不需要。第二點(我們將其稱爲下圖中的-R 點)實際上是 P 點函數 P (讓我們假設第一個點被稱爲 P)

P 點函數 P=-R

那麼,什麼是 P 點函數 P?它實際上只是 P 的切線。請看以下圖片:

橢圓曲線加密與陷門函數,比特幣背後的密碼學

如果點函數產生一條線路會走到某個極端,會發生什麼?

如果線沒有抵達靠近原點的曲線,我們實際上可以定義一個最大 X 值,其中線將回繞並從頭開始。有關示例,請參見下圖。

橢圓曲線加密與陷門函數,比特幣背後的密碼學

我理解了暗門函數,但實踐中公私鑰是如何創建的?它們是如何與要加密的數據一起使用的?

這是一個好問題,但它要求更深入的答案。在這篇文章中我給出了關於 RSA 與橢圓曲線加密較爲通俗的解釋。然而,還有更多技術資源,我期望你去研究它們。

來源鏈接:blog.goodaudience.com