---
title: ECC
tags: ECC, nisra, 2017fall, ppt
---
[TOC]
# ECC 研究
組員:PS、SetMao、中學生
---
## 密碼學簡介
----
en
有in , upon(使得)的意思
----
code
密碼
----
en + code = encode
使得 + 密碼 = 使它變成密碼
----
encode = 加密??
----
encrypt
encrypt
encrypt
----
encode v.s encrypt
----
encode.py
----
密碼學為一種利用數學方法來對資料加密和解密的科學。
----
![](https://i.imgur.com/Ar8Fb7h.png)
----
- 加密技術強度的高低通常牽涉到下列的因素
- 演算法強度
- 金鑰保護機制
- 金鑰的長度
----
- Kerckhoff Principle
- 密碼系統的安全性不在演算法的保密,而是取決於金鑰的保密機制。
---
Symmetric Encryption(對稱式加密)
Asymmetric Encryption (非對稱式加密)
----
### Symmetric Encryption(對稱式加密)
----
![](https://i.imgur.com/apKU61a.png)
----
Caesar cipher(凱薩密碼)
----
caesar.py
----
### Data Encryption Standard
### (對稱式加解密法)
----
![](http://www.csie.ntnu.edu.tw/~u91029/DES2.png)
----
permutation
contraction
left circular shift
F(費斯妥函数)
----
| | x = 1 | x = 0 |
| -------- | -------- | -------- |
| y = 1 | 0 | 1 |
| y = 0 | 1 | 0 |
----
![](http://www.csie.ntnu.edu.tw/~u91029/DES3.png)
----
![](http://www.csie.ntnu.edu.tw/~u91029/DES4.png)
----
expansion
permutation
S
----
![](http://www.csie.ntnu.edu.tw/~u91029/DES5.png)
----
![](http://www.csie.ntnu.edu.tw/~u91029/DES6.png)
----
### Advanced Encryption Standard
### (對稱式加解密法)
----
破解DES 需要的時間不斷被縮短,在1998 年已經被縮短到了56 小時,1999 年的獲勝者更是只花了少於一天的22 小時便完成了破解。 2000 年,DES 的「聯邦政府標準」寶座,也在公開競爭以後被全新標準AES(Advanced Encryption Standard)給取代。
----
![](http://images.cnitblog.com/blog2015/671127/201503/130035028553414.png)
----
AddRoundKey(輪密鑰加)
SubBytes(字節代替) #1 bytes(字節) = 8 bits(位元)
ShiftRows(行位移)
MixColumns(列混淆)
----
![](https://upload.wikimedia.org/wikipedia/commons/a/ad/AES-AddRoundKey.svg)
----
![](https://upload.wikimedia.org/wikipedia/commons/a/a4/AES-SubBytes.svg)
----
![](https://upload.wikimedia.org/wikipedia/commons/6/66/AES-ShiftRows.svg)
----
![](https://upload.wikimedia.org/wikipedia/commons/7/76/AES-MixColumns.svg)
---
### RSA(非對稱性加解密法)
----
![](https://i.imgur.com/uZmgpON.png)
---
## DES v.s. RSA
----
| | DES | RSA |
|:--:|:--:|:--:|
| 其它名稱 | 秘密金鑰加密法 | 公開金鑰加密法 |
| 加解密的key是否相同 | 相同 | 不同 |
| key可否公開 | 不可公開 | 公開鑰匙可以公開,私有鑰匙不可公開|
----
| | DES | RSA |
|:--:|:--:|:--:|
| key保管問題 |如果與N個人交換訊息,需保管好N把加解密鑰匙 | 無論與多少人交換訊息,只需保管自己的私密鑰匙|
| 加解密速度 |快 | 慢|
| 應用 | 常用於加密長度較長的資料,例:email |常用於加密長度較短的資料、數位簽章 |
---
前情提要 OwO)b
## RSA 原理
----
### 公私鑰製造過程
1. 選兩個互質的數字(p = 7, q = 19)
2. 計算 ```n = p * q``` (n = 7 * 19 = 133)
3. 計算 ```m = (p-1) * (q-1)``` (m = 6 * 18 = 108)
4. 選一個 e (與 m 互質的數字)(e = 5)
5. 計算 ```d * e mod m = 1``` (d = 65)
6. 公鑰 ```{n, e} = {133, 5}```、私鑰 ```{n, d} = {133, 65}```
----
### 驗證過程
1. 假設 Bob 要跟 Alice 說 ```33``` , 則 Bob 必須用 Alice 的公鑰去加密
33^5^ % 133 = 10
2. 當 Alice 收到 Bob 傳來的 ```10``` ,則她必須用私鑰去解密
10^65^ % 133 = 33
---
![](http://pic.pimg.tw/sauxyoyo/1367334431-2991184993.jpg?v=1367334432)
這是一杯咖啡,認同請分享
---
## 什麼是ECC?
----
Elliptic Curves Cryptography,橢圓曲線密碼學
新一代的公開金鑰演算法,由於 ECC 所需的記憶體較少,所以非常適合在例如智慧卡等的資源有限環境下使用。
---
## ECC 原理
----
Weierstrass方程:
**y^2^ + Axy + By = x^3^ + Cx^2^ + Dx + E**
滿足魏爾斯特拉斯函數的方程式
且除了 (0, 0) 之外任一點皆存在切線
則可稱作橢圓曲線
該曲線形狀並非橢圓,而是因為其與取橢圓周長的公式相近而得名
----
![](https://i.imgur.com/zoq0Oja.png)
公式:y^2^ + Axy + By = x^3^ + Cx^2^ + Dx + E
共線方程式:y = kx + b
----
制定一個有限域F,其中包含p個元素 (p為一質數)
加法法則:**a + b ≡ c (mod p)**
乘法法則:**a × b ≡ c (mod p)**
除法法則:**a × b^-1^ ≡ c (mod p)**
轉成離散型式的有限域E
----
![](https://i.imgur.com/8ijok3m.gif)
y^2^ = x^3^ + x + 1 (mod 23)
----
**y^2^ = x^3^ + ax + b**
為最簡單的可做為加密法的橢圓曲線 OwO)b
----
若橢圓曲線上任一點P,存在有一個最小正整數n,使 **nP = O^∞^**
則稱n為P的**階**
----
函式:y^2^ = x^3^ + x + 1
P = (1,7)
2P?
----
Xp=1,Yp=7
Xq=1,Yq=7
斜率:
y'=( 3(Xp)^2^ + a ) / ( 2Yp ) mod p
y'=2/7 mod p
----
Xr公式為Xr= ( λ^2^ - Xp - Xq ) mod p
Yr公式為Yr= ( λ(Xp-Xr) - Yp ) mod p
2P=(7,11)
----
能公開金鑰的加密法,都必須基於一個數學難題
比如RSA,RSA很容易能選定兩個質數p、q相乘為n,但我們很難去幫n做因式分解得到p、q,這是RSA的數學難題。
那ECC呢?
----
**K=kG**
K = 公鑰,為E(a,b)上面的一點
k = 私鑰,為一小於n的整數
----
![](https://i.imgur.com/ya12q68.gif)
明文被編碼在 M 點上
M 為 E(a,b)上一點
----
C1 - kC2
= M + rK - **k(rG)**
= M + rK - **r(kG)**
= M + r (K - kG)
= M
---
## RSA v.s ECC
----
![image alt](https://www.ansforce.com/upload/posts/8/S1-p729/58b2738629631.jpg)
---
## 攻擊手法
1. 金鑰分配
2. 時間攻擊
3. 長度
---
## ECC 應用
---
## ECDSA
ECDSA 是 橢圓曲線密碼學(Elliptic Curve Cryptography, <span><!-- .element: class="fragment highlight-red" -->ECC</span>) <br/> + <br/>數位簽章演算法(Digital Signature Algorithm, <span><!-- .element: class="fragment highlight-red" -->DSA</span>)
----
## DSA?
與 RSA 概念類似。
![](https://i.imgur.com/5DagHvm.png)
----
* 資料完整性 (Integrity)
* 身份鑑別性 (Authentication)
* 不可否認性 (Non-Repudiation)
----
## ECDSA 金鑰產生
----
1. 選擇一個有限域 E(a,b)
2. 選擇一正整數 k 為私鑰
3. 計算 K = kG
4. 公開金鑰 { E(a,b),K,G }
----
## ECDSA 簽章
----
要對訊息 m 做簽章
1. 隨機產生正整數 d
2. 計算 dG=(X1,Y1) 及 r=X1 (mod p)
3. 計算 s = d^-1^ ( H(m) + kr ) mod p
4. 對訊息m的簽章為 (r,s)
----
## ECDSA 驗章
----
其他人對訊息 m 驗章
1. 計算 c = s^-1^ (mod p) 及 H(m)
2. 計算 U1 = H(m) * c (mod p)
3. 計算 U2 = r * c (mod p)
4. 計算 U1 * G + U2 * K = (X0,Y0)
5. V = X0 mod p
----
證明:
d
= s^-1^ ( H(m) + kr )
= s^-1^H(m) + s^-1^rk
= c * H(m) + c * rk
= U1 + U2d mod p
----
U1 * G + U2 * K
= U1 * G + U2 * kG
= **dG**
---
## BitCoin
![](https://i.imgur.com/kkhBfQT.png)
---
## 參考資料
[演算法筆記](http://www.csie.ntnu.edu.tw/~u91029/Encryption.html)
[ECC加密算法入門介紹](https://www.pediy.com/kssd/pediy06/pediy6014.htm)
---
## Q & A