###### tags: `blockchain` # ECDSA筆記 ## ECDSA ECDSA是透過ECC衍生的加密方法 橢圓曲線密碼學的方程式是基于以下形式的方程,屬於離散對數,具有加法和乘法,但沒有除法減法擁有Trapdoor function特性(單向的),K是公鑰、k是私鑰、G是方程式上的某點,K = k * G,我們能透過私鑰k推出公鑰K,但公鑰K無法進行回推,這確保了只要私鑰不洩漏,被破解的可能性就非常低。 ![](https://i.imgur.com/U5xvLzA.png) ![](https://i.imgur.com/ClfTchH.png) ![](https://i.imgur.com/DhD1XSb.png) ECDSA會與訊息一起加密,訊息會透過SHA產生一個很大的hash值,使其更難以預測,在SHA1中會產生20byte換算成160bit,一個bit有0、1兩種可能,160bit就有2^160次方個可能性,這個不可預測的特性讓SHA1算法成為一個非常好的哈希算法,非常安全且產生“碰撞(collision)”(兩個不同文件有相同的哈希)的可能性非常低,使得通過偽造數據獲得特定的哈希的變得不可能。 ## why need to mod P(?) 例如,計算兩個大質數的乘積是微不足道的。但是給定兩個大質數的乘積,很難找到這兩個質數(稱為素因式分解問題)。假設我提供數字6895601並告訴你它是兩個質數的乘積。找到這兩個質數要比讓它們相乘生產6895601要困難得多。 普通的數字1000=A * B 能很輕易都配對 50 * 50、100 * 10 但若是透過質數 109 * 103 = 11227 算出11227很簡單 但要回推出109和103 幾乎只能透過窮舉的方式達成 後續關於ECC 方程式只有乘法 沒有除法 這使得演算法具有trap door單向門特性 代表我們能透過得知 109 * 103 = 11227 卻無法計算 11227/103 109 是私鑰 103則是ECC的G(常數) 11227是簽章 https://cypherpunks-core.github.io/ethereumbook_zh/05.html ## why dont use Symmetric-key 對稱式加密 對稱式加密 用同一把私鑰進行加密 這代表加解密都用同一把 若要在本地加密 私鑰便需要儲存在本地 一些遊戲廠商只要本地私鑰被找到 就等同檔案自動解密 透過連線解密也同理 若是連線中私鑰被得知 也是一樣 而非對稱式 私鑰加密 公鑰解密 私鑰是儲存於本地的 網路不會儲存私鑰 所以只要私鑰不洩漏 就幾乎沒有洩密的可能 ## 從隨機數生成私鑰 使用安全的隨機演算法產生數字 或是長度足夠的字詞(記憶詞的概念) SHA256(以太坊用Keccak-256)產出固定長度的hash 256位的2進制 64位的16進位數字 2^256=4^128=16^64 2進位 01 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 15是1111 表達16進位只需四個位數 256/4=64 所以轉換16進位是64位數 example address: f8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315 可透過web3.js產生 經過""空字串驗證演算法為Keccak-256![](https://i.imgur.com/ZtO24Nv.png) 這包含ETH使用的產生私鑰githubCODE geth https://ethereum.org/zh-tw/developers/docs/accounts/ https://cypherpunks-core.github.io/ethereumbook_zh/05.html https://ithelp.ithome.com.tw/articles/10251031 ## SHA3 keccak是SHA3的原型 SHA-2 SHA-3 是一種加密的標準 https://zhuanlan.zhihu.com/p/97953640 # 2022/10/17 清交區塊演講ECDSA 談到P+Q是在驗證 加法 p+p 驗證乘法得合法性 私鑰就是個隨機數 EX:1 公鑰是私鑰做G次產生 實際看spec256 R跟ECDSA有關 S完全沒有 V基本是判斷負數用的 d私鑰 Q公鑰 生成簽章的 也有談到EC recover https://hackmd.io/Q2KytbDZTcifdfkEn_e2_Q