2

我想要(或創建)基於橢圓密鑰密碼的串行密鑰。我想要做的是將信息編碼在可以公開驗證但僅由我創建的序列中。最初的想法是從http://www.ssware.com/cryptolicensing/cryptolicensing_net.htm,他們可以創建信息加密的連續劇。但是,這是基於RSA導致大量數據。所以我想自己創建類似的東西。帶ECC的串行密鑰

然後我發現:http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c12799/Product-Keys-Based-on-Elliptic-Curve-Cryptography.htm

但是,我看到在這個沒有benifit:他們選擇需要由應用程序和創建者被稱爲域參數。公鑰用於加密(生成序列),而私鑰在應用程序中並用於解密。但是,知道域參數和私鑰,很容易爲ECIES派生公鑰,對吧?

接下來的想法是隻對信息進行任意編碼並在其上附加一個基於ECDSA的簽名。但是這會導致一個很大的序列號。

我真正在尋找的是一種類似於http://ellipter.com的解決方案,他們使用正確的概念:生成序列的私鑰和驗證它們的公鑰。他們在屏幕截圖中顯示的密鑰非常短:對於128位密鑰只有30個字符左右。

這樣做的正確方法是什麼?我錯過了這個正確的計劃嗎?它不能是ECDSA,它不能是ECIES。但是還有什麼?

回答

4

你需要的是一個橢圓曲線digital signature scheme,比如ECDSA

基本上,您的密鑰生成服務器將擁有私鑰的一半,而您發佈的軟件將包含公有的一半。您的序列號將包含一個簡單的序列號,並使用私鑰加上該號碼的簽名。當用戶輸入號碼時,軟件使用其公用密鑰檢查簽名是否有效。

您還可以對產品激活密鑰使用相同的方案;在這種情況下,您要簽名的數據不僅僅是一個序列號,而是某種類型的摘要字符串,用於標識用戶以及他們正在安裝軟件的系統的某些功能。

現在,壞消息是,不幸的是,具有非平凡安全級別的ECDSA簽名對於許可密鑰仍然很長。您可以通過降低安全級別來縮短簽名長度,但是可以通過暴力僞造簽名。基本上,你將在安全和可用性之間進行權衡。您還可以嘗試其他帶有短簽名的簽名方案,如Schnorr signatures或可能類似McEliece-based signature scheme described in this paper,但即使這些簽名方案可能也非常適合用戶可鍵入的許可證密鑰。


通常混淆人們誰首先遇到的數字簽名的RSA簽名的形式是,RSA cryptosystem是一種不尋常的,在相同的基本算法可用於public-key encryption和數字簽名,並且在較低的級別上,這兩種操作是雙重的,使得RSA簽名操作可以被看作是「用私鑰加密」並且簽名驗證是「用公鑰解密」(這是相反的你會爲普通的公鑰加密做些什麼)。但是,對於大多數其他公鑰密碼系統來說,這種雙重性並不成立:一般來說,數字簽名方案與公鑰加密方案完全不同(儘管它們通常基於類似的數學問題)。事實上,即使對於RSA,一旦開始考慮像padding這樣的細節,簽名和加密操作就會變得不一樣,如果您想要將基本「教科書RSA」算法轉換爲實際可用作安全實用的密碼系統的算法,那麼這些操作就非常重要。

+0

嗯,我闡述了我已經實施了一個計劃。我知道簽名方案,ECC,RSA。我的問題是Ellipter如何創建如此短的**序列號。此外,它不能是一個純粹的簽名,因爲數據被另外加密。 – divB

+0

我注意到在回答之後,並在上面添加了一些內容。他們可能會使用除ECDSA之外的其他簽名方案,但他們也可能只是在安全級別上進行縮減。不知道他們實際使用的是什麼算法,很難說「128位密鑰強度」的真正含義。 –