或許連初探都算不上

密碼學

密碼學講師自己找

about me

看!活的小丑!

實際上好像也沒什麼好寫的.jpg

-蘇昱亘,最後那個字是ㄒㄩㄢ

-Repkironca、RE、小丑、自動打 WA 機

- 講話不知道在快幾點的,記得打斷我

-華鯊公約擁護者,整份簡報都在廚

-不管你是要問問題,或單純無聊都可以來 OWO

https://hackmd.io/@Repkironca/Hkg2geC5q

Content(1/2)

前言

古典密碼

計算機概論

編碼

對稱式加密

非對稱式加密

密鑰交換

密碼學應用

Content(2/2)

希望講師今天不要過勞死

總之我們開始吧:)

你有想過...密碼學到底是什麼嗎?

202207220149

27ckefgisc28

 

27CkeFGisC28

21tsTo0WeaK7

2@CkeFGisc@8

~2CkeFGisc8~

但我還是要傳教

怎麼設定好的密碼?

Nice meme, 30 days ban

駭進蜥蜴人的FB?

其實匿名者不是駭客組織

加入Anonymous?

建立安全的通信

- 跟一大堆數學

資料傳遞時,可能遭受的攻擊

竊聽,Eavesdrop

-竄改,Falsification

-電子欺騙,Spoofing

-抵賴,Repudiation

for (int i = 0; i < 4; i++){
  girlfrernds_of_ginger.push_back(element[i]);
}

資料傳遞時,可能遭受的攻擊

竊聽,Eavesdrop

-竄改,Falsification

-電子欺騙,Spoofing

-抵賴,Repudiation

資料傳遞時,可能遭受的攻擊

竊聽,Eavesdrop

-竄改,Falsification

-電子欺騙,Spoofing

-抵賴,Repudiation

資料傳遞時,可能遭受的攻擊

竊聽,Eavesdrop

-竄改,Falsification

-電子欺騙,Spoofing

-抵賴,Repudiation

密碼學三大分類

編碼

-不需要金鑰

-cuz 資料傳輸方便

-只要Google就能翻譯

雜湊

-單向不可逆

-無法被破譯

-輸出長度固定

-不同的 output 配對不同 input

加密

-一定配有密鑰

-得知密文也無用

-得知演算法也無用

-可能被暴力破解

-應用最廣泛

沒用小知識:那三個 icon 與主題一點關係都沒有

"The enemy knows the system"

– Claude Shannon

The concept that a Cryptographic system should be designed to be secure, even if all its details, except for the key, are publicly known. 

柯克霍夫原則

Kerckhoffs's principle

1

前言

2

古典密碼

3

計算機概論

5

非對稱式加密

4

編碼

6

密鑰交換

Any Questions?

古典密碼

讓你知道古人究竟有多突發奇想

凱薩密碼

-Yap,羅馬共和時期的那個凱薩大帝

如果需要保密,信中便用暗號,也即是改變字母順序,使局外人無法組成一個單詞。如果想要讀懂和理解它們的意思,得用第4個字母置換第一個字母,即以D代A,余此類推。

-使用字母偏移替換的方式,e.g. 偏移量3

A B C D E F G H I J
D E F G H I J K L M

cat -> edw

AawIsSoDianOrz ->DdzLvVrGldqRuc

凱薩密碼

-凱薩密碼有資格被稱為加密嗎?

> 可以,但是這演算法超級爛

-我可以怎麼破解它 :hacker_thonk: ?

這是一個替換式密碼

但我不知道它是凱薩

這個絕對是凱薩密碼

但我不知道它的金鑰

> 別擔心,羅馬共和時期的識字人口超級低

這是一個替換式密碼

但我不知道它是凱薩

這個絕對是凱薩密碼

但我不知道它的金鑰

窮舉 26 種偏移量

透過頻率分析

一字對一字實在太明顯

透過單詞分析

1st e
2nd t
3rd a
1st th
1st the
#include <bits/stdc++.h>

using namespace std;

int main (){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cout << "想不到吧,我會在密碼學中置入C++語法題";
}

題目這種東西就是好刷一直刷

只要寫不停就會變超級強喔

:)

維吉尼亞密碼

-凱薩密碼的基礎下,但更難了一咪咪

> 真的只有一咪咪

-窮舉凱薩密碼的26種偏移並列表

明文 G A W R G U R A
密鑰 W A S T O N W A
密文 C A O K U H N A

e.g. 密鑰 = waston

密鑰:小於或等於明文長度的字串

 

不足者複製自己補齊

如右圖,用明文、密鑰來對照表格

維吉尼亞密碼

-還是很容易被破解,why?

-頻率分析不能用了 ... 你確定?

明文 G A W R G U R A
密鑰 W A S T O N W A
密文 C A O K U H N A

e.g. 密鑰 = waston

What if

密鑰的長度 n 被我們得知了?

假設歸假設

我們還是不知道密鑰長度 n 啊

阿蘇你當我們會通靈?

-信不信由你,通靈真的也是一招

> 你以為敵人很有創意嗎

-窮舉啦,哪次不窮舉

> 其實去年暑訓也是教我們窮舉

觀察出來的結果是否有意義

有意義的長文中,隨機 2 字母相同的機率為 0.068 %

重複字串 字串首字index 間隔
ZVRAO 102, 134, 390,
402, 426
32, 256, 12, 24
MBDBMVS 143, 155, 307,
411, 439
12, 152, 104, 28

2

4

恩尼格瑪密碼

23. Feb. 1918

Arthur Scherbius

亞瑟 謝爾比烏斯

不是莫比烏斯反演

11. Nov. 1918

就叫你不要亂惹中立仔喔

"ㄟ墨西哥陪我一起去扁美國好不好"

-齊默爾曼電報事件

1923,邱吉爾:

"其實我們早就破解德軍密碼了啦 ㄏㄏ"

Arthur Scherbius

亞瑟 謝爾比烏斯

好啊我就看你要塑膠我多久

輪盤插槽 * 4

輪盤 * 8

連接線 * 6

輪盤插槽 * 4

輪盤 * 8

連接線 * 6

密鑰:輪盤8選4、輪盤初始狀態、連結線位置

Feb. 1926

英:"德國那邊在講什麼鬼話"

法:"不知道,我破譯不出來"

美:"沒事啦,非常好凡爾賽條約"

:"好耶好耶那就算了"

 

波蘭 be like:

6 years later...

增加輪盤數量

增加接線數量

我懶得改設計

Bomba,炸彈

boobah

01. Sep. 1939

波蘭 -> 法國

22. Jun. 1940

法國 -> 英國

布來切利莊園

> btw, 可以去看模仿遊戲,非常好電影

計算機科學與人工智慧之父

Alan Turing, 艾倫 圖靈

> 名字真的可以再沒創意一點

Bomba 的進化版,Bombe

現代密碼學:

計算機加密

1

前言

2

古典密碼

3

計算機概論

5

非對稱式加密

4

編碼

6

密鑰交換

Any Questions?

計算機概論

其實我只教基礎,詳細的留給硬體

十進制

特別親民,正常人使用

使用 0 ~ 9

要表達"9 + 1"時進位

二進制

給電腦看的,密碼學會用到

使用 0 ~ 1

要表達"1 + 1"時進位

十六進制

不算少見,一些奇怪地方會用到

使用 0 ~ 9 + A ~ F

要表達"F + 1"時進位

進位系統

十進制 二進制 十六進制
11 1011 B
17 10001 11
38 100110 26

令從右往左數的第一個數字為第一位,依此類推

如果要把 n 進制的數字轉成十進制

當第 a 位的數字為 x 時

它在十進制的值會是 a * na-1

第四位 第三位 第二位 第一位
十進制
二進制
十六進制

 100 = 1

 20 = 1

 160 = 1

 101 = 10

 21 = 2

 161 = 16

 102 = 100

 22 = 4

 162 = 256

 103 = 1000

 23 = 8

 163 = 4096

e.g.

二進位 to 十進位

1010000101 = 29 + 27 + 22 + 20 = 512 + 128 + 4 + 1 = 645

#include <bits/stdc++.h>
using namespace std;

int main (){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cout << "早上好密碼學,現在我非常喜歡C++\n";
    cout << "請實作出十進制轉二進制\n";
}
#include <bits/stdc++.h>
#define gura ios_base::sync_with_stdio(false), cin.tie(0);
#define ll long long int
using namespace std;

ll BIEX_(ll a, ll b){
  if(b == 0) return 1;
    if(b&1){
      return a * BIEX_(a, b-1);
    } else{
      int tmp = BIEX_(a, b/2);
      return tmp * tmp;
    }
}

int main (){
  //其實還能再套倍增優化,但我好懶ㄛ
  gura
  ll num;
  while (cin >> num){
    int pow = 0;
    while (BIEX_(2, pow) < num) pow++;
    bool judge = false; //確認不會有多餘的0輸出
    while (pow >= 0){
      if (num - BIEX_(2, pow) >= 0){
        num -= BIEX_(2, pow);
        cout << '1';
        judge = true;
      }else if(judge){
        cout << '0';
      }
      pow--;
    }
    cout << '\n';
  }
}

附上小丑阿蘇無聊毒瘤解

優化還做半套

看不懂正常 因為我用快速冪

如果你能理解...

考慮上台當講師ㄇ,我好愛你

 

你問我正常解答?

自己想啊,我才不跟你講咧:)

Bits

-aka 位元,電腦的基本儲存單位

-儲存一個二進位數字

-由 n 個 bit 組成的組合,共有 2n 種可能

1 Byte = 8 bit                       1 TiB = 1024 GiB

1 KiB = 1024 Byte               1 PiB = 1024 TiB

1 MiB = 1024 KiB                1 EiB = 1024 PiB

1 GiB = 1024 MiB                1 ZiB = 1024 EiB

> 其實 TiB 以上,你這輩子都用不太到

> 如果你跟我一樣懶,可以全部都用 1000 算,那’i’就不用加了

XOR

-"邏輯互斥或",中文並沒有比較好理解

-具有交換律、結合律

-對自己做 ⊕ -> 一堆 0

-和一堆 0 做 ⊕ -> 什麼都不會改變

0 1
0 0 0
1 0 1

這是 and

0 1
0 0 1
1 1 1

這是 or

6 0 1
0 0 1
1 1 0

這是 xor

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

Any Questions?

編碼 Encode

把本來就很難理解的東西變成更難理解的東西

還記得那個跟主題完全沒關係的閃電ㄇ

不需要金鑰

資料傳輸方便

Google 即可翻譯

  • 每個 bit 能儲存的狀態只有 0 或 1
  • "不是啊,那我要怎麼存英文"

> 這隻 Gura 看起來快解體了

把英文變成數字

然後再化二進制!

: ASCII_thonk :

Dec = 十進制,Hx = 十六進制,Oct = 八進制

American Standard Code for Information Interchange

> 其實不會有人講全名但看起來比較帥

  • 英文、常用符號
  • 95 + 33 = 128
十進制編號 白話文
2 標題開始
9 Tab
27 Esc
127 Delete
  • 28 = 128,占 8 bits

Unicode 萬國碼

"英文跟其他符號是解決了,那其他語言呢?"

UCS-2: U+0000~U+FFFF

                       占用 2 bytes,aka 16 bits

                       可表示164 = 216= 65536個字元

UCS-4: U+00000000~U+7FFFFFFF

                       占用 4 bytes,aka 32 bits

                       可表示168 = 232= 2147483648 個字元

-用 U+ 前綴,後面接十六進制數字

-把所有你想得到的字元編碼!

> 對,包含那些奇怪的古文字

What if 我們要表達一坨二進位數字?

I:01001001

a:01100001

m:01101101

01100001

01000011

01101100

01101111

01110111

01101110

I am a Clown

雖然我不是星爆家

但這聽起來不夠快

對吧?

010010010110000101101101011001010100001101101100011011110111011101101110

by the way,因為好玩, 我故意打錯了一個數字

找出來沒有獎勵

base-64

它是編碼,顯然不能加密 ==

-64:以 6 bits(26 = 64)為一單位

A 0 I 8 Q 16 Y 24
B 1 J 9 R 17 Z 25
C 2 K 10 S 18 a 26
D 3 L 11 T 19 b 27
E 4 M 12 U 20 c 28
F 5 N 13 V 21 d 39
G 6 O 14 W 22 e 30
H 7 P 15 X 23 f 31
g 32 o 40 w 48 4 56
h 33 p 41 x 49 5 57
i 34 q 42 y 50 6 58
j 35 r 43 z 51 7 59
k 36 s 44 0 52 8 60
l 37 t 45 1 53 9 61
m 38 u 46 2 54 + 62
n 39 v 47 3 55 / 63

base-64

其實不一定要 ASCII,任何二進位編碼都可用

A 0 I 8 Q 16 Y 24
B 1 J 9 R 17 Z 25
C 2 K 10 S 18 a 26
D 3 L 11 T 19 b 27
E 4 M 12 U 20 c 28
F 5 N 13 V 21 d 39
G 6 O 14 W 22 e 30
H 7 P 15 X 23 f 31
g 32 o 40 w 48 4 56
h 33 p 41 x 49 5 57
i 34 q 42 y 50 6 58
j 35 r 43 z 51 7 59
k 36 s 44 0 52 8 60
l 37 t 45 1 53 9 61
m 38 u 46 2 54 + 62
n 39 v 47 3 55 / 63

-YouTube 連結!

> 我覺得有人光看網址就知道這是什麼了

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

Any Questions?

對稱式加密

Shared-key Cryptosystem

aka 共用密鑰加密系統

text:"John-Ray-Gigi got a new girlfriend again"

text ':"sTaR-TsJ-GpyM 5d1 9 W_@ leMoNilEmo nDinG"

(神秘的函式運算)

text:"John-Ray-Gigi got a new girlfriend again"

密鑰x

密鑰x

(神秘的函式運算)

> gif太佔空間放不下

對稱式加密系統

-加密 && 解密都使用同一把金鑰!

> 我知道你要說什麼,可不可以統一說"金鑰"或"密鑰",但我偏不要:)

-凱薩密碼其實就是一種

加密 && 解密金鑰:字母偏移量

-當然,維吉尼亞密碼也是

加密 && 解密金鑰:小於等於明文長度的字串

-答對了!下一個是恩尼格瑪密碼

加密 && 解密金鑰:轉盤、初始格數、接線

> 畢竟古人還想不到非對稱式這種複雜方式

一次性密碼本

One Time Pad

讓我們再複習一下 XOR 的性質...

0 1
0 0 1
1 1 0

這是 xor

A ⊕ B ⊕ A = (A ⊕ A)⊕ B = null ⊕ B = B

我也不知道叫什麼定律但這很重要!

  • 具有結合律

A ⊕ B ⊕ A = (A ⊕ A)⊕ B

A ⊕ B ⊕ A = (A ⊕ A)⊕ B

  • XOR自己 = 一堆0(null)

A ⊕ A = null

  • 與 null 做 XOR = 自己

A ⊕ null = A

一次性密碼本

One Time Pad

A ⊕ B ⊕ A = (A ⊕ A)⊕ B = null ⊕ B = B

我也不知道叫什麼定律但這很重要!

A⊕B 1 1 0 0 0 0 1
A 0 1 1 0 0 1 0
A⊕B⊕A 1 0 1 0 0 1 1

A:0110010

B:1010011

A 0 1 1 0 0 1 0
B 1 0 1 0 0 1 1
A⊕B 1 1 0 0 0 0 1

一次性密碼本

One Time Pad

-拿一串跟明文一樣長的 01 字串對明文 XOR!

Q:為什麼一定要跟明文一樣長?

A:如果金鑰長度小於明文,那就只是變種的維吉尼亞

       還記得我怎麼破解它的嗎?這會使此演算法不安全

       而且如果遇到一長串 null,金鑰會直接被印出來

Q:一次性密碼本的優缺點?

A:優點部分,由於所有明文產生出相同密文的機率都相同,           此演算法是被證實安全的,完全無法被破解

       至於缺點,除了密鑰長到哭以外,它不能預防竄改

       就算駭客不知道金鑰,還是能在不被發現的前提更改內容

     

一次性密碼本

One Time Pad

Q:為何叫"一次性"密碼本?

A:此演算法的金鑰,只能被使用一次,且通常是隨機產生

       如果重複使用,駭客只需把兩份密文 XOR

       此時金鑰的保護已消失,就可以透過分析還原出原文了

       (A ⊕ K)⊕(B ⊕ K)= A ⊕ B

資料加密標準

Data Encryption Standard

-它是一種區塊加密!

一次加密整坨 bits

用於已知訊息長度的狀況

-金鑰:64 bits 的 01 字串,實際會用 56 bits

-每個區塊:64 bits

-進行 16 次的費斯妥網路

!燒腦警告!

這塊超級硬,講師被揍爛

請注意自己的大腦,隨時可能停機

明文(64 bits)

L0(32 bits)

R0(32 bits)

L1(32 bits)

R1(32 bits)

F

\費斯妥網路/

\進行 16 次/

"誒阿蘇,你別想用神秘的 function 這種東西來唬爛我們"

好吧,這是你自找的

Shift

Shift

Compress

(56 bits)

(56 bits)

(28 bits)

(28 bits)

(48 bits)

expand,擴張

32 bits -> 48 bits

S-box,我也不會翻

48 bits

P-box,我也不會翻

32 bits

S-box,我也不會翻

48 bits

柯克霍夫原則

Kerckhoffs's principle

Shift

Shift

Compress

expand,擴張

32 bits -> 48 bits

P-box,我也不會翻

32 bits

*8

input:6 bits

output:4 bits

110101

11 -> 3

1010 -> 10

OUTPUT:

0011

資料加密標準

Data Encryption Standard

-1970s,NBS 與 NSA 的陰謀論(128 bits -> 56 bits)

-就算是現代攻擊手段,仍無法破解 S-box 之保護

-2008年,在一天內被暴力破解

256 = 7 2057 5940 3792 7940

-3 DES

-AES,Advanced Encryption Standard

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

Any Questions?

非對稱式加密

Asymmetric cryptography

aka 公開金鑰密碼系統

\阿蘇你終於上課上到發瘋了對不對/

把金鑰公開?那就不用加密了,好耶下課

0

我還沒瘋,至少現在還沒

公開金鑰

私密金鑰

"有沒有姜姜假打UNO真汁妹的卦"

P

S

P

5pyJ5rKS5pyJ5aec5aec5YGH5omTVU5P55yf5rGB5aa555qE5Y2m

> 我絕對不會說這串"亂碼"只是我拿 base-64 蒙混的

5pyJ5rKS5pyJ5aec5aec5YGH5omTVU5P55yf5rGB5aa555qE5Y2m

S

"有沒有姜姜假打UNO真汁妹的卦"

(神秘的函式運算)

(神秘的函式運算 again)

> BTW,真的有ㄛ,有興趣歡迎私訊講師

非對稱式加密系統

ASYMMETRIC CRYPTOGRAPHY

-公開金鑰只能拿來加密,私密金鑰只能拿來解密

-適合多對一的傳輸的單向傳輸

S
P

Gigi_girlfriend[0]

Gigi_girlfriend[1]

Gigi_girlfriend[2]

Gigi_girlfriend[3]

Gigi_girlfriend[4]

Gigi_girlfriend[5]

Gigi_girlfriend[6]

Gigi_girlfriend[7]

-速度慢,對金鑰的需求很大

RSA 加密演算法

!離散數學警告、數論警告!

因為這些東西又難又噁,現在也講不完

是故我沒辦法告訴你具體的原因證明

-選擇兩個超級大的質數,大約落在 1020 左右,並相乘兩者

\(p\),which is a prime

\(q\),which is a prime

\(N = pq\)

-計算剛剛兩個質數各 - 1 後的乘積

\(r = (p-1)\times(q-1)\)

-找出一個與 r 互質的數字 e

e := e ⊥ r,e ∈ N

RSA 加密演算法

-找出 e 在模 r 下的模反元素 d

    如果你聽不懂,就是找出一個數字 d

    使得 \((e \times d) \%\, r = 1\)

\(ed ≡ 1  (mod\;r)\)

\(p、q\):超級大的質數   \(N: p\,\times\,q\)

\(r:(p - 1)(q - 1)\)

\(e:\)與 \(r\) 互質的數

P
S

e

d

N

-加密:先把密文分成若干區段,每個區段分開算(區塊加密)

    令其中一區塊為 \(m\) ,化成 \( m^e\; \% \;N\)

密文 ≡ me (mod N) 

-解密:計算 密文\(^d\;\%N\),就能回推出明文

密文d ≡ 明文 (mod N)

RSA 加密演算法

-破解:成功做出 N 的因數分解,還原出\(p、q\)

那兩個質數實在太大,一般電腦做不到

> : 量子電腦thonk :

#include <bits/stdc++.h>
#define ll long long int

using namespace std;

ll turn_ (ll a, ll mod){
  return (a % mod + mod) % mod;
}
ll plus_ (ll a, ll b, ll mod){
  return turn_(a%mod + b%mod, mod);
}
ll minus_ (ll a, ll b, ll mod){
  return turn_(a%mod - b%mod, mod);
}
ll multiply_(ll a, ll b, ll mod){
  return turn_((a%mod) * (b%mod), mod);
}

ll Binary_Exponentiation(ll a, ll b, ll mod){
    if(b == 0) return 1;
    if(b&1){
        return multiply_(a, Binary_Exponentiation(a, b-1, mod), mod);
    } else{
        int tmp = Binary_Exponentiation(a, b/2, mod);
        return multiply_(tmp, tmp, mod);
    }
}

int gcd(int a, int b){
  if (b == 0) return a;
  return gcd(b, a % b);
}

long long Exgcd(ll a, ll b, ll &x, ll &y){
  if (a < b){
    return Exgcd(b, a, y, x);
  }
  if(b == 0){
    x = 1;
    y = 0;
    return a;
  }
  long long ret = Exgcd(b, a % b, x, y);
  int tmp = x;
  x = y;
  y = tmp - (a / b) * y;
  return ret;
}

ll Exgcd_Ma(ll input, ll mod){ //求模反元素用的
  ll a = input, b = mod;
  ll x = 0, y = 0;
  Exgcd(a, b, x, y);
  while (x < 1) x += b;
  return x;
}

int main (){
  ll p = 43; //第一個質數放這邊,放太大會爛掉
  ll q = 59; //第二個質數放這邊,放太大會爛掉
  const ll N = p * q;
  const ll r = (p-1) * (q-1);
  cout << "N = " << N << '\n';
  cout << "r = " << r << '\n';
  const ll e = 13; //我預設是選 17
  cout << "e = " << e << '\n';
  const ll d = Exgcd_Ma(e, r);
  cout << "d = " << d << '\n';
  ll mes = 2022; //模擬訊息,太大也會爛掉
  cout << "原明文 = " << mes << '\n';
  ll incode = Binary_Exponentiation(mes, e, N);
  cout << "密文 = " << incode << '\n';
  ll decode = Binary_Exponentiation(incode, d, N);
  cout << "解碼的密文 = " << decode << '\n';
}

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

Any Questions?

金鑰交換

Key Exchange

如果你不想永遠都用傳紙條的方式

話說

我們要怎麼把金鑰傳給別人

那 我們要怎麼保護

拿來加密的演算法的金鑰

迪菲-赫爾曼金鑰交換

Diffie-Hellman key exchange

!離散數學警告、數論警告!

因為這些東西又難又噁,現在也講不完

所以我不會把等等的函式攤開,更不會證明

Function M

-可以把兩把金鑰合而為一

-即使得到 A 、A-B、仍無法從 A-B 中提取 B

-順序不會影響合成的金鑰,即 A-B = B-A

input:兩把金鑰 A、B

output:合成後的金鑰 A-B

-把同樣兩把金鑰合成會得出新的金鑰,即 A != A-A

P
A
B
P
P
P
A
P
A
P
B
P
B
P
A
P
A
B
P
B
A

哭啊

你們是不是沒有人

記得我的名字

P
B

(1)A、B決定兩個數字P,Q,P是一個超大的質數,Q為其之原根

(2)A、B 各決定一個私密數字 X、Y

(3)A 計算 QX mod P,B 計算 QY mod P,把計算結果傳給對方

(4)雙方再計算QXY mod P 或 QYX mod P,此即為共同金鑰

阿蘇你要不要講一個

我們聽得懂原理的

數論這種東西連你自己都爛得要命

就不能想辦法迴避嗎

假設你跟歐拉定理很熟,而且知道生成元是什麼,其實可以直接啃

混成密碼系統

Hybrid Crytosystem

-對稱性密碼系統:計算快速,但密鑰交換麻煩

    非對稱性密碼系統:無須交換密鑰,但計算很慢

[我已經懶得請猴子與花心鬼出場了]

(1)B 製作公鑰與私鑰,把公鑰傳給 A

(2)A 利用該公鑰,來加密對稱性的金鑰

(3)A 把加密後的對稱性金鑰傳給 B

(4)B 用私鑰解密對稱性金鑰

(4)對,真的就只有這樣,不要懷疑

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

應用

唬爛了半天,密碼學到底有什麼用

單向散列函數

hash function

input:< 某長度之字串

output:長度固定的亂碼

-從 hash 值無法回推出原文

-抗碰撞性:幾乎無法找到兩個 input,產生出一樣的 output

雜湊碰撞 Hash Collision

MD5 -> 1.47 * 10-29

SHA-1 -> 1.00 * 10-45

SHA-256 -> 4.30 * 10-60

-改動任何一個 bit,都會對 hash 值產生極大影響

單向散列函數

hash function

MD5:128 bits,抗碰撞性已被攻破

MD5:128 bits,抗碰撞性已被攻破

SHA-1:160 bits,兼容性高,但抗碰撞性已被攻破

SHA-2:跟 MD5 還是類似,不過目前沒被攻破

> 我只說目前喔,幾年後我不知道

SHA-3:結構整個被翻新,且支援無上限 input

                  以往針對 MD 結構的攻擊已無效

RIPEMD-160:160 bits,由歐盟提出,被比特幣採用

> 其實好像沒很安全,但因為它特別短就被用了

單向散列函數

hash function

-預防軟體被修改

> 這就是為何你亂裝掛會被抓到

-儲存密碼

> 密碼直接存明文跟裸奔有 87% 像

加鹽(絕對不是這樣翻):

在密碼後插入一段隨機數據(salt)再儲存

-密碼學安全偽亂數生成器

隨機性 不可預測性 不可重複性
偽隨機數產生器 O X X
密碼學安全偽亂數生成器 O O X
硬體亂數生成器 O O O

訊息鑑別碼

竊聽

竄改 

電子欺騙 

抵賴

-預防訊息遭到竄改!

-在訊息後多送一個 tag 過去

input:一把新的金鑰、密文

    output:tag

Text:我放棄跟蘇玉亙溝通

              陳亮延你來

Text ' Tag

T

+ Text ' = Tag : al4k

M

Text:我放棄跟蘇玉亙溝通

              陳亮延你來

+ Text ' = Tag : al4k

T

Text ':UIboihhfysOHfpodhSD

M

訊息鑑別碼

  • CBC MAC
  • NMAC
  • PMAC
  • HMAC

m [0]

m [1]

m [2]

f(m[0], k1

f(m[1] ' , k1

f(m[2] ' , k1

f(m , k2

Tag

-把訊息分成若干區塊

-區塊用金鑰 k1 加密後,與下個區塊做XOR

-最後結束時,再用一把新金鑰 k2 加密

訊息鑑別碼

This is why 製造 tag 需要用新的一把金鑰

在沒有金鑰的情形下,創造不出合理的 tag

數位簽章

竊聽

竄改 

電子欺騙 

抵賴

-反過來的非對稱性加密系統:

     拿私鑰加密,公鑰解密

-instead of 直接對密文簽名

     一般會對明文的 hash 簽名

Text:雲端是裝飾用的嗎

             連上傳都不會

Text -> Hash Function -> H

S

+ H -> Sign

Text ':UIbewoinvisbeoinf

Sign

+ Sign -> H

P

Text -> Hash Function -> H

+ Text  ' -> Text

數位簽章

Q:為什麼一串加密過的密文,可以當成簽名用?

A:由於公鑰與私鑰是成對的,如果一個人發出來的密文

       有辦法被公鑰解密,則代表該訊息絕對是由本人發出

       也因為私鑰只有自己知道,能防止抵賴的發生

Q:如果是用公開金鑰解密,那數位簽章不就沒機密性了?

A:沒錯,但使用數位簽章的目的本來就不是為了機密性。

    當然還是要用安全的算法來加密明文,數位簽章僅能     保證其完整性與防止抵賴。

Q:數位簽章不是很容易被駭客任意複製嗎?

A:首先,簽名本來就是簽給別人看的,複製數位簽章沒

       有意義。同時針對不同消息,給出的數位簽章也會不      同,所以不用擔心濫用的問題

數位憑證

-aka 叫第三方幫你背書

竊聽

竄改 

電子欺騙 

抵賴

-CA,Certificate Authority

-丟一堆資料給 CA

    他們認證完後會幫你做數位簽名

Sign G

個人資訊

SR

Sign R

PG

憑證

Sign R

Sign G

Text '

...

Text

Text '

SG

Sign G

憑證

Sign R

Sign G

Text '

...

Q:如果駭客偽裝成 CA呢?誰要來認證 CA 的簽名?

A:一般會找另一家 CA 來背書,來證明此間 CA 不是由駭

    客假扮的。而位於最頂端的那間就真的無法認證,換     言之,對所有憑證的信任都是來自於這家母公司

CA

CA

CA

CA

CA

CA

CA

CA

3

計算機概論

4

 

編碼

5

對稱式加密

7

密鑰交換

6

非對稱式加密

8

密碼學應用

結語

這次是認真要下課了 :partying_face:

針對資料傳遞的攻擊 電腦儲存空間單位 Hash Function
密碼學三大分類 XOR 與他的性質 一點點偽亂數生成器
柯克霍夫原則 對稱式加密系統 訊息鑑別碼
凱薩密碼 一次性密碼本 CBC MAC
維吉尼亞密碼 DES 數位簽章
卡西斯基試驗 非對稱式加密系統 數位憑證
恩尼格瑪密碼與歷史 迪菲-赫爾曼金鑰交換 猴子與花心鬼好吵
進位系統 混成密碼系統 數論是個垃圾東西

我們學到了什麼?

恭喜各位學完

去年暑訓被公認最硬的課程

  • 祝各位下午的活動愉快!!!
  • 有人明年要繼承這門課嗎:)
  • 後面有我所有的 source,真的有興趣可以去挖
  • 有沒有人要算一下我總共廚了幾次鯊鯊
  • 我不教證明絕對不是因為我也不會
  • 助教 Aaw 比我電我幾萬倍,歡迎去纏著他不放

Source

石田寶輝, & 宮崎修一. (2017). 演算法圖鑑 (謝孫源, Ed.; 陳彩華, Trans.). 城邦文化. https://webpac.tphcc.gov.tw/webpac/content.cfm?mid=788600&m=ss

Chou, A. (2018). 應用密碼學入門. https://hitcon.org/2018/CMT/slide-files/d1_s2_r4.pdf

Source

Source

Gibson, T. (2020, April 1). Kasiski Test. YouTube. https://www.youtube.com/watch?v=asRbswE2hFY

梗你看電影 X. (2022, January 16). 【H&M 365 EP. 16】齊默爾曼電報 - 咦?皇帝隨便說說的話,你外交部長竟然當真? /《金牌特務:金士曼起源》The King’s Man, 2022 | PODCAST.YouTube. https://www.youtube.com/watch?v=tR-DH9cIz64

森纳映画. (2022, July 1). 【不止遊戲】二戰德軍號稱「謎」的密碼機,究竟是如何使用的?. YouTube.

https://www.youtube.com/watch?v=kE3Xb-XH8NU

Source

Shin-ming , C. (2016, August 9). 2-9 資料加密標準(DES). Youtube.

https://www.youtube.com/watch?v=WnsgWK0DOOM

洪âng春男chhun-lâm. (2020, May 18). RSA公開金鑰的加密與解密方法. YouTube.

https://www.youtube.com/watch?v=YZ8iMkxmGkI

對不起我真的找不到其他了

2022建北暑訓_密碼學

By repkironca

2022建北暑訓_密碼學

  • 283