加密演算法之橢圓曲線密碼學(ECC)啟蒙

買賣虛擬貨幣

本文是關於橢圓曲線密碼學(ECC)的基本介紹,目的是讓大多數讀者瞭解為什麼ECC是一種有效的加密工具以及ECC運作的基礎知識。我希望在一般意義上對其進行解釋,我將省略相關的證明和實現細節,並把精力集中在使ECC發揮作用的高階原則上。

ECC可以做什麼?

ECC是一種用來加密資料的方法,加密過後只有特定的人才能對其進行解密。在現實生活中,使用ECC的例子非常多,但主要用途還是網際網路資料和流量加密。例如,ECC可用於確保使用者在傳送電子郵件時,除了收件人之外,沒有人可以閱讀這封郵件。

ECC是一種公鑰加密技術

公鑰加密技術的型別非常多,橢圓曲線加密不過是其中一個類別。其它加密演算法包括RSA,Diffie-Helman等。為了更好地討論ECC以及構建於相關概念的想法,首先我將簡要介紹公鑰密碼學的背景。如果你有時間的話,可以更加深入地研究。

公鑰加密的發生過程如下圖所示:


圖中共有兩把金鑰,其中一把是公鑰(public key),一把是私鑰(private key)。這些金鑰用於加密和解密資料,世界上的任何人都可以在傳輸時檢視加密資料,但無法讀取訊息。

我們不妨假設Facebook將要接收特朗普的私人郵件。Facebook需要確保當總統透過網際網路傳送郵件時,中途沒有人(如NSA或網際網路服務提供商)能夠讀取該郵件。使用公鑰加密的交換過程如下:

特朗普通知Facebook他要向他們傳送私人郵件;

1.Facebook向特朗普傳送他們的公鑰;
2.特朗普使用公鑰來加密他的資訊:“I love Fox and Friends”+ 公鑰 = “s80s1s9sadjds9s”
3.特朗普只將加密的訊息傳送給Facebook
4.Facebook使用他們的私鑰來解密訊息:“s80s1s9sadjds9s”+私鑰 = “I love Fox and Friends”

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

· 公鑰可以傳送給任何人。這是公開的。
· 私鑰必須要被安全保管,因為一旦中途某人獲得了私鑰,他就可以解密資料。
· 計算機可以非常快速地使用公鑰來加密訊息,並用私鑰來解密訊息。
· 如果沒有私鑰,那麼計算機將需要花費很長時間(數百萬年)才能從加密訊息中獲取原始資料。

工作原理:陷門函式

所有公鑰加密演算法的關鍵在於每種演算法都有各自獨特的陷門函式(trapdoor function)。陷門函式是一種只能進行單向計算,或者單向計算更容易的函式(使用現代計算機耗費的時間少於數百萬年)。

非陷門函式:A + B = C

如果給我A和B,我可以得到C。問題是如果給我B和C,我同樣可以計算出A。因此這不是陷門函式。

陷門函式:“I love Fox and Friends”+公鑰=“s80s1s9sadjds9s”

如果給我原始資料“I love Fox and Friends”和公鑰,我可以生成加密資料“s80s1s9sadjds9s”。但是如果給我加密資料“s80s1s9sadjds9s”和公鑰,我不能生成原始資料“I love Fox and Friends”。

在加密演算法RSA(可能是最流行的公鑰系統)中,陷門函式的作用取決於將大數分解成素數因子(prime factors)的難度。

在加密演算法RSA(可能是最流行的公鑰系統)中,陷門函式的作用取決於將大數分解成素數因子(prime factors)的難度。

公鑰:944,871,836,856,449,473
私鑰:961,748,941和982,451,653

在上面例子中,公鑰是一個非常大的數字,而私鑰是公鑰的兩個素數因子。這是一個很好的陷門函式示例,因為我們只要將私鑰中的數字相乘就能很容易地得到公鑰,但如果你只有公鑰,那麼即使使用計算機也需要很長時間才能重新得到私鑰。

請注意:在實際加密應用中,私鑰長度超過200位數字才能被認為是安全的。

為什麼橢圓曲線加密與眾不同?

使用ECC的原因與RSA完全相同。我們只需生成公鑰和私鑰,然後雙方就能進行安全通訊。然而,ECC擁有RSA沒有的優點:使用ECC加密的256位金鑰所提供的安全性,與使用RSA加密的3072位金鑰相當。

這意味著在諸如智慧手機、嵌入式計算機或者加密貨幣網路等資源有限的系統中,使用ECC所需的硬碟空間和頻寬不到RSA的10%。

ECC的陷門函式

也許這是大家閱讀本文的原因,也是ECC區別於RSA的地方。陷門函式類似於數學遊戲池子。我們從曲線上的某一點開始,並使用點函式(dot function)來尋找另一個新點。我們不斷重複點函式,不斷地在曲線上跳躍,直到得到最後一點。我們不妨看看具體演算法:


· 從A開始:
· A與B進行點函式運算得到 -C(從A到B繪製一條直線,直線與橢圓曲線相交於點 -C);
· 作 -C關於X軸的對稱點,在橢圓曲線上得到點C;
· A與C進行點函式運算得到 -D(從A到C繪製一條直線,直線與橢圓曲線相交於點 -D);
· 作 -D關於X軸的對稱點,在橢圓曲線上得到點D;
· A與D進行點函式運算得到-E(從A到D繪製一條直線,直線與橢圓曲線相交於點-E);
· 作-E關於X軸的對稱點,在橢圓曲線上得到點E。

這是一個很棒的陷門函式,因為如果你知道起點(A)的位置以及到達終點(E)所需的跳數,那麼你很容易就能找到終點。另一方面,如果你只知道起點和終點的位置,那麼你幾乎不可能得到到達目的地所需的跳數。

公鑰:起點A,結束點E
私鑰:從A到E的跳數

答疑時間

以下是我第一次瞭解ECC時遇到的幾個問題,希望我能正確解答。

第二點是怎麼找出來的?如果點函式運算是在兩點之間畫一條直線,你不需要先找到第二點嗎?

答案:不。第二點(不妨稱其為-R)實際上是P(假設第一點為P)與P進行點函式運算得到的結果:P

與P進行點函式運算得到第二點-R。

那到底什麼是P與P的點函式運算?它實際上只是P的切線。如下圖所示:


如果點函式運算畫出的線走到某個極端,會發生什麼?

如果直線與曲線的交點離原點很遠,我們實際上可以定義一個最大值X,這時直線將回繞並從頭開始。有關示例請參見下圖:


現在我瞭解了陷門函式,但在實踐中,我該如何建立公鑰和私鑰呢?它們如何與將要加密的資料一起使用?

這是一個很好的問題,不過它的答案要比本文論述的範圍更加深入。在本文中,我僅對RSA和ECC進行了非常簡潔的解釋。不過相關的技術資源有很多,我建議你去了解這些資源。

跟我有什麼關係?

我一開始研究ECC是因為我對比特幣和加密貨幣感興趣。ECC之所以被用作加密貨幣的加密金鑰演算法,是因為它所需的金鑰大小(和擴充套件資料)不到RSA的10%。

我希望你能對ECC和公鑰加密有所瞭解,本文並不是技術說明。我希望能吸引更多人關注ECC的用途,並對其工作原理有所瞭解。

參考來源:
https://www.youtube.com/watch?v=dCvB-mhkT0w
https://devcentral.f5.com/articles/real-cryptography-has-curves-making-the-case-for-ecc-20832

翻譯:喏唄爾
原文作者:Lane Wagner
原文連結:https://blog.goodaudience.com/very-basic-elliptic-curve-cryptography-16c4f6c349ed

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;