0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入解析ECC256橢圓曲線加密算法

大大通 ? 2024-12-26 16:32 ? 次閱讀

一、加密算法概述

數(shù)據(jù)加密的基本過程就是對原來為明文的文件或數(shù)據(jù)按某種算法進(jìn)行處理,使其成為不可讀的一段代碼為 “密文”,使其只能在輸入相應(yīng)的密鑰之后才能顯示出原容,通過這樣的途徑來達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的。該過程的逆過程為解密,即將該編碼信息轉(zhuǎn)化為其原來數(shù)據(jù)的過程。

1、常見加密算法

常見加密算法可分為三類,對稱加密算法、非對稱加密算法、Hash 加密算法

1.1 對稱加密算法

特點(diǎn)是文件加密與解密使用相同的密鑰,密鑰較短。

優(yōu)點(diǎn):算法公開、加密速度快、計(jì)算量小、加密效率高。

缺點(diǎn):加密方與解密方需要提前敲定好密鑰,并雙方保存好密鑰。

常見對稱加密算法:AES、SM4

1.2 非對稱加密算法

可以在不傳遞密鑰的情況下完成解密

優(yōu)點(diǎn):相比對稱加密算法其安全性更好

缺點(diǎn):加解密時(shí)間花費(fèi)更長,適合少量數(shù)據(jù)加密

常見非對稱加密算法:ECC、RSA、SM2

1.3 Hash 算法

算法特點(diǎn)是單向算法,不能通過 Hash 值還原目標(biāo)信息

優(yōu)點(diǎn):不可逆、易計(jì)算、特征化

缺點(diǎn):存在散列沖突(存在兩個(gè)不同的原始值經(jīng)過哈希運(yùn)算后得到同樣的結(jié)果)

常見非對稱加密算法:SM3、SHA256、SHA384、SHA512、SHA224、SHA512_224、SHA512_25

二、ECC256 算法

ECC(Elliptic Curve Cryptography,橢圓曲線加密)算法公私鑰的長度是 ECC 安全性的關(guān)鍵參數(shù)之一,ECC 算法后跟著的是橢圓曲線的域長度如 256 位,ECC256 是目前最常用的私鑰長度之一,它提供了一個(gè)良好的安全性和性能的平衡。

1、ECC 算法原理介紹

1.1 概述

ECC(Elliptic Curve Cryptography)加密算法是一種基于橢圓曲線數(shù)學(xué)理論的公鑰加密算法。

ECC 公鑰:是基于私鑰和橢圓曲線上的基點(diǎn)計(jì)算得出的,公鑰在加密過程中用于接收者加密消息,在數(shù)字簽名中用于驗(yàn)證簽名。

ECC 私鑰:是一個(gè)隨機(jī)數(shù),它在橢圓曲線加密算法中用于生成公鑰以及在解密和簽名過程中使用。

ECC 的安全性在很大程度上取決于曲線的選擇,目前美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)維護(hù)了一系列安全的橢圓曲線參數(shù),即著名的 NIST 曲線。

wKgZPGdyD6uAWO3yAACkhjvKRm4928.png

ECC 公鑰長度的選擇應(yīng)根據(jù)安全要求和可用資源來確定,一般來說 256 位和 384 位的 ECC 公鑰長度足以滿足大多數(shù)應(yīng)用的要求。

1.2 算法概念

橢圓曲線離散對數(shù)問題,橢圓曲線上的兩個(gè)點(diǎn) P 和 Q,P 稱為基點(diǎn)(base point)、k 為私鑰(private key)、Q 為公鑰(public key)

Q = k * P

給定 k 和 P,根據(jù)加法法則,計(jì)算 Q 很容易;

但給定 P 和 Q ,求 k 非常困難(實(shí)際應(yīng)用 ECC,質(zhì)數(shù) P 取的非常?,窮舉出 k 非常困難)。

1.3 算法過程

選?條橢圓曲線 Ep(a,b), 并取橢圓曲線上?點(diǎn)作為基點(diǎn) P。

選定?個(gè)大數(shù) k 作為私鑰,并?成公鑰 Q= k * P。

加密:選擇隨機(jī)數(shù) r,將消息 M 生成密文 C,密文是?個(gè)點(diǎn)對,即 C = (rP, M+rQ)。

解密:M+rQ-k(rP) = M+r(kP)-k(rp) = M


1.4 算法過程解析

點(diǎn)運(yùn)算的加法

過點(diǎn) A B 交于曲線的一個(gè)交點(diǎn),取這個(gè)交點(diǎn) X 軸對稱的點(diǎn)為 A+B

wKgZPGdyD6uAcwqxAAA6AcfHWIY810.png

點(diǎn)運(yùn)算的乘法

當(dāng) A 和 B 無限接近,A = B 時(shí)這條線為曲線上的切線,切線交于曲線的一個(gè)交點(diǎn),取這個(gè)交點(diǎn) X 軸對稱的點(diǎn)為 A+A 即為 2A

wKgZO2dyD6uAT0iOAAAs65iBrvg142.pngwKgZO2dyD6uAM5ZmAAFUec0Cgew356.png

其中,6P 是由 3P 切線交線的來,也可由 2P 切線交線后 4P,再與 2P 交線的來

可得如下式子:

2(3P) = 3(2P)

密鑰生成

私鑰:選擇一個(gè)大的隨機(jī)整數(shù) k 作為私鑰。這個(gè)私鑰應(yīng)該保密,不應(yīng)被泄露。

公鑰:選擇一個(gè)橢圓曲線上的基點(diǎn) P(這個(gè)點(diǎn)是公開的,并且對于所有使用該曲線的用戶都是相同的)。然后計(jì)算公鑰 Q=kP,即私鑰 k 與基點(diǎn) P 的標(biāo)量乘法結(jié)果,公鑰 Q 可以公開。


加密過程

隨機(jī)數(shù):選擇一個(gè)隨機(jī)數(shù) r,這個(gè)隨機(jī)數(shù)在每次加密時(shí)都應(yīng)該不同,以增加加密的安全性。

密文生成:將消息 M 編碼為一個(gè)與橢圓曲線上的點(diǎn)可以相加的數(shù)值(這通常涉及到一些數(shù)學(xué)轉(zhuǎn)換,比如將消息哈希為一個(gè)整數(shù)),然后計(jì)算密文 C,它是一個(gè)點(diǎn)對,即 C=(rP, M+rQ)。

rP 是隨機(jī)數(shù) r 與基點(diǎn) P 的標(biāo)量乘法結(jié)果。 M+rQ 是消息 M 與 rQ(即 r 與公鑰 Q 的標(biāo)量乘法結(jié)果)的加法,這里的加法是在橢圓曲線上的加法,不是普通的整數(shù)加法。


解密過程

解密過程:持有私鑰 k 的用戶可以解密密文 C。

從密文 C 中提取出 rP 和 M+rQ。

使用私鑰 k 計(jì)算 k(rP)。

然后計(jì)算 M:(M+rQ)?k(rP)

由于 Q=kP,所以 rQ=r(kP)。因此:M = (M+rQ)?rQ=(M+rQ)?k(rP)=M+r(kP)?k(rP)

這樣就成功地從密文中恢復(fù)出了原始消息 M。

安全性

ECC 的安全性基于橢圓曲線離散對數(shù)問題的難度,給定 P 和 Q=kP,很難計(jì)算出私鑰 k。

加密過程中使用的隨機(jī)數(shù) r 增加了每次加密的多樣性,使得即使相同的消息被多次加密,產(chǎn)生的密文也會(huì)不同。

2、ECC 算法公私鑰數(shù)組長度

ECC 算法中,公鑰和私鑰的長度是固定的,并且與橢圓曲線的域長度(即 ECC256,256位)直接相關(guān),以下是ECC256 算法中公鑰和私鑰的字節(jié)長度:

三、簽名驗(yàn)簽過程

因?yàn)?ECC 通常用于加密密鑰交換或數(shù)字簽名,而不是直接用于數(shù)據(jù)加密,所以簽名驗(yàn)簽過程分三部分:公鑰生成、明文簽名、簽名驗(yàn)簽。

1、公鑰生成

1.1 密鑰生成工具

OpenSSL 是一個(gè)強(qiáng)大的開源安全套接字層密碼庫,它提供了豐富的密碼算法、密鑰和證書封裝管理功能,實(shí)現(xiàn)了目前大部分主流的密碼算法和標(biāo)準(zhǔn),如對稱算法、非對稱算法、散列算法、數(shù)字簽名和認(rèn)證、X509 數(shù)字證書標(biāo)準(zhǔn)、PKCS12、PKCS7 等。

特點(diǎn):OpenSSL 是一個(gè)開源的軟件庫,用戶可以自由地使用、修改和分發(fā)它

1.2 工具使用

在 Git 中集成了 OpenSSL 庫,OpenSSL 主要作為一個(gè)加密庫來使用,為 Git 的通信和數(shù)據(jù)存儲(chǔ)提供安全支持,以下公鑰生成章節(jié)中生成公鑰等操作均在 Git 中調(diào)用 OpenSSL 庫使用。

2、生成 ECC256 密鑰

1.1 ECC256 公私私鑰

① Eg. ECC256 算法生成公私鑰 OpenSSL 命令

生成 ECC256 私鑰

openssl ecparam -genkey -name prime256v1 -param_enc explicit -out secp256r1-key.pem

提取公鑰

openssl ec -in secp256r1-key.pem -pubout -out ecpubkey.pem

打印私鑰

openssl ec -in secp256r1-key.pem -text > pri.hex

打印公鑰

openssl ec -pubin -in ecpubkey.pem -text > pub.hex

② 打開 pri.hex,查看文本,提取其中公鑰與私鑰數(shù)據(jù)

③ 提取出來的公鑰與私鑰數(shù)據(jù)數(shù)組如下:

// 軟件工程中使用的公私鑰

uint8 ecc_secp256r1_prikey[] = "ca085e45ec036d7a9bcd67d7990a89dd50816b9351141aafbbb75bb3c862cc51"

uint8 ecc_secp256r1_pubkey[] = "f227f1bd2dd624e211580207e248fcc077bc5a5a5877128d85e25a3aedb24b98b0efd869cd9953ca5aed03b9b4528164d2cbf203b35f391d3cd573aebd78646e"

3、ECC256 簽名

簽名方需要待簽名數(shù)據(jù) test_data_raw.bin,需要 ECC256 密鑰 secp256r1-key.pem

① 生成簽名數(shù)據(jù)的哈希,首先對待加密數(shù)據(jù)文件的內(nèi)容生成一個(gè)哈希值,使用 SHA-256 算法來完成。

# 生成文件的 SHA-256 哈希值

openssl dgst -sha256 -binary -out hash.bin test_data_raw.bin

② 使用 ECC 私鑰簽名上一步驟生成的哈希值。

# 使用 ECC 私鑰對哈希值進(jìn)行簽名

openssl dgst -sha256 -sign secp256r1-key.pem -out signature.bin hash.bin

將簽名轉(zhuǎn)換為十六進(jìn)制表示(用于查看)

openssl base64 -in signature.bin -out signature.hex

③ 對 test_data_raw 的哈希值進(jìn)行簽名,簽名數(shù)據(jù)轉(zhuǎn)為 hex 查看

4、ECC256 簽名驗(yàn)簽

驗(yàn)簽方需要待簽名數(shù)據(jù) test_data_raw.bin、由 ECC256 密鑰 secp256r1-key.pem 中提取的 ecpubkey.pe公鑰。


① 重新生成簽名數(shù)據(jù)的哈希,接收方在收到數(shù)據(jù)和簽名后,首先需要對數(shù)據(jù)重新生成哈希值,使用 SHA-256 算法來完成。


# 接收方重新生成文件的 SHA-256 哈希值
openssl dgst -sha256 -binary -out received_hash.bin test_data_raw.bin


② 使用公鑰驗(yàn)簽:然后,接收方使用 ECC256 公鑰對簽名進(jìn)行驗(yàn)證,以確保數(shù)據(jù)在傳輸過程中沒有被篡改。


# 使用公鑰驗(yàn)證簽名
openssl dgst -sha256 -verify ecpubkey.pem -signature signature.bin data_hash.bin


③ 如果簽名驗(yàn)證成功,OpenSSL 不會(huì)輸出任何內(nèi)容(或者可能會(huì)輸出一個(gè) "Verified OK" 的消息,這取決于你的 OpenSSL 版本和配置);

如果驗(yàn)證失敗,OpenSSL 會(huì)輸出一個(gè)錯(cuò)誤消息,指出簽名無效;

printf >>
$ openssl dgst -sha256 -verify ecpukey.pem -signature signature.bin hash.bin
Verified OK

四、參考文檔

《【ECC加密算法】| ECC加密原理詳解| 橢圓曲線加密| 密碼學(xué)| 信息安全》

https://www.bilibili.com/video/BV1v44y1b7Fd/?spm_id_from=333.337.search-card.all.click&vd_source=9fe0b02e4f116cc091f5fa76d03c35c6

《Openssl》

https://www.openssl.org/

《橢圓加密算法》

https://baike.baidu.com/item/%E6%A4%AD%E5%9C%86%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95/10305582?fr=ge_ala

登錄大大通網(wǎng)站,閱讀原文,提問/評論,獲取技術(shù)文檔等更多資訊!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 密鑰
    +關(guān)注

    關(guān)注

    1

    文章

    139

    瀏覽量

    19775
  • 加密算法
    +關(guān)注

    關(guān)注

    0

    文章

    216

    瀏覽量

    25551
  • 數(shù)據(jù)加密
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    12723
收藏 人收藏

    評論

    相關(guān)推薦

    快充充電器基于非對稱橢圓曲線加密算法的單芯片認(rèn)證方案

    基于非對稱橢圓曲線加密算法的單芯片認(rèn)證方案
    發(fā)表于 08-15 10:41 ?1975次閱讀
    快充充電器基于非對稱<b class='flag-5'>橢圓</b><b class='flag-5'>曲線</b><b class='flag-5'>加密算法</b>的單芯片認(rèn)證方案

    關(guān)于幾種常用加密算法比較

    AES加密算法是密碼學(xué)中的高級加密標(biāo)準(zhǔn),該加密算法采用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,算法應(yīng)
    的頭像 發(fā)表于 03-19 09:21 ?5898次閱讀
    關(guān)于幾種常用<b class='flag-5'>加密算法</b>比較

    基于橢圓曲線算法的數(shù)字簽名技術(shù)研究

    【作者】:朱利民;王明斐;【來源】:《甘肅科技》2010年04期【摘要】:橢圓曲線密碼體制是一種高安全性、高效率的公鑰密碼體制,它已逐漸取代RSA加密算法,成為下一代公鑰加密的標(biāo)準(zhǔn)。本
    發(fā)表于 04-23 11:29

    三種加密器件的熟悉

    :SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。橢圓加密算法ECC)是一種公鑰加密
    發(fā)表于 08-24 11:37

    DES加密算法是什么

    一、加密算法1、 DES加密算法DES數(shù)據(jù)加密標(biāo)準(zhǔn),是一種使用密鑰加密的塊算法。DES中的密鑰key為8個(gè)字節(jié)64位,但每第8個(gè)為校驗(yàn)位不參
    發(fā)表于 07-22 09:13

    對稱加密算法是什么

    對稱加密算法也叫私鑰加密算法,其特征是收信方和發(fā)信方使用相同的密鑰,即加密密鑰和解密密鑰是相同或等價(jià)的。非對稱加密算法也叫公鑰加密算法。其特
    發(fā)表于 07-22 07:09

    基于STM32的C語言SHA256加密算法相關(guān)資料下載

    標(biāo)題基于STM32的C語言SHA256加密算法本文博客鏈接:作者:zsj ,轉(zhuǎn)載請注明.項(xiàng)目中用到了一個(gè)新的加密算法(SHA256),我之前只用過AES的
    發(fā)表于 02-14 06:48

    基于AES和ECC的混合加密系統(tǒng)的設(shè)計(jì)

    基于AES的加密算法具有速度快、強(qiáng)度高、便于實(shí)現(xiàn)等優(yōu)點(diǎn)和ECC加密算法具有密鑰分配與管理簡單、安全強(qiáng)度高等優(yōu)點(diǎn),采用AES加密算法加密大數(shù)據(jù)
    發(fā)表于 03-20 10:24 ?42次下載
    基于AES和<b class='flag-5'>ECC</b>的混合<b class='flag-5'>加密</b>系統(tǒng)的設(shè)計(jì)

    基于ECC加密的電子商務(wù)系統(tǒng)

    為解決網(wǎng)上交易的安全問題,研究了在嵌入式電子商務(wù)系統(tǒng)中SSL協(xié)議雙向認(rèn)證的方法。針對RSA公鑰算法伴隨密鑰長度增加明顯降低系統(tǒng)效率,使用橢圓曲線公鑰算法
    發(fā)表于 12-21 10:19 ?10次下載

    基于AES加密算法的信息安全研究(AEC與ECC結(jié)合)

    使用AES 對稱加密算法加密明文數(shù)據(jù)ECC 非對稱加密算法加密密鑰并生成數(shù)字簽名,從而既保障了數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程中的安全性,又完成了數(shù)字簽名
    發(fā)表于 10-31 11:32 ?13次下載
    基于AES<b class='flag-5'>加密算法</b>的信息安全研究(AEC與<b class='flag-5'>ECC</b>結(jié)合)

    常見公鑰加密算法有哪些

    Cryptography(ECC,橢圓曲線加密算法)。使用最廣泛的是RSA算法(由發(fā)明者Rivest、Shmir和Adleman姓氏首字母
    發(fā)表于 12-10 09:41 ?4.4w次閱讀

    基于區(qū)塊鏈橢圓曲線密碼學(xué)ECC的研究

    明白了橢圓曲線的由來,我們再來看橢圓曲線在密碼學(xué)上應(yīng)用的方案。首先面對的問題就是橢圓曲線是連續(xù)的
    發(fā)表于 03-25 11:17 ?1826次閱讀
    基于區(qū)塊鏈<b class='flag-5'>橢圓</b><b class='flag-5'>曲線</b>密碼學(xué)<b class='flag-5'>ECC</b>的研究

    橢圓曲線密碼學(xué)詳細(xì)解析

    橢圓曲線密碼學(xué)(ECC),是一種基于橢圓曲線數(shù)學(xué)誕生的非對稱秘鑰加密
    發(fā)表于 01-06 09:59 ?7389次閱讀
    <b class='flag-5'>橢圓</b><b class='flag-5'>曲線</b>密碼學(xué)詳細(xì)<b class='flag-5'>解析</b>

    解析加密算法:可逆加密和不可逆加密

    加密算法我們整體可以分為:可逆加密和不可逆加密,可逆加密又可以分為:對稱加密和非對稱加密。
    發(fā)表于 08-08 10:11 ?1.8w次閱讀

    基于STM32的C語言SHA256加密算法

    標(biāo)題基于STM32的C語言SHA256加密算法本文博客鏈接: 作者:zsj ,轉(zhuǎn)載請注明. 項(xiàng)目中用到了一個(gè)新的加密算法(SHA256),我之前只用過AES的
    發(fā)表于 12-09 14:36 ?35次下載
    基于STM32的C語言SHA<b class='flag-5'>256</b><b class='flag-5'>加密算法</b>