You are on page 1of 32

BỘ THÔNG TIN VÀ TRUYỀN THÔNG

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG


CƠ SỞ TẠI TP.HỒ CHÍ MINH
Khoa Kỹ thuật Điện tử 2
------0o0------

CƠ SỞ MẬT MÃ HỌC

● GIẢNG VIÊN HƯỚNG DẪN: Ths Trần Quang Thuận


NHÓM 4
Sinh viên thực hiện: Võ Quốc Tế N18DCDT048
Võ Văn Đạt N18DCDT013
Lương Công Mạnh N18DCDT033
Mạch Gia Hưng N18DCDT023
Quách Văn Hùng N18DCDT022
Trần Khánh N18DCDT027
Vũ Văn Tú N18DCDT049
Bài Toán phân tích thừa
số

01 03
Bài toán xếp balo
Ví dụ và Định nghĩa - Dãy siêu tăng
- Ví dụ và định nghĩa

Hệ mật mã Merkle-

02 04
Hệ mật mã RSA Hellman
-Tạo khóa, mã khóa, giả - Thuật toán tạo khóa
mã và một số ví dụ - Mã hóa, giải mã
- Ví dụ
01
Bài toán phân tích thừa số
Cho số nguyên n , với n ≥ 2 ta luôn phân tích n dưới
dạng tích của các lũy thừa của các nguyên tố và phân
tích này là duy nhất như sau

n = p1e1 p2e2 …..pkek


- Trong đó:
- Pi là các số nguyên tố,
- ei là số nguyên dương
- Nếu n là tích của hai số nguyên tố n=p*q, trong đó:
p&q là hai số nguyên tố lớn xấp xỉ nhau. Thì việc phân
tích n thành p&q là bài toán khó

- Nếu ta biết p&q thì tính n rất đơn giản nhưng ngược lại
biết n tìm p&q là rất khó
02
Hệ Mật Mã RSA
Hệ mã RSA

Hệ mã khóa công khai RSA được đưa vào 1977, là


công trình nghiên cứu của ba đồng tác giả Ronald
Linn Revest, Adi Shamir, Leonard Aldeman

Hệ mật mã được xây dựng dựa trên tính khó giải


của bài toán phân tích một số thành thừa số
nguyên tố hay còn gọi là bài toán RSA(RSAP).
Định nghĩa bài toán RSA ( RSA Problem)

Cho hai số nguyên dương

N = p * q ( q&p là hai số nguyên tố


lẻ)
Một số nguyên dương b sao cho

gcd(b, (p-1)(q-1))=1

Và một số nguyên C

Bài toán đặt ra : tìm số nguyên dương x sao cho x b ≡ C(mod n)


Tạo khóa
Thuật toán : sinh khóa cho mã hóa công khai
RSA
B1: Sinh hai số nguyên tố lớn q và p có giá trị xấp xỉ
nhau
B2: Tính n=p.q và φ(n) = (p-1).(q-1)

B3: chọn một số ngẫu nhiễn e, 1 < e < φ(n) sao cho gcd(e, φ(n)) =
1
B4: sử dụng thuật toán Euclide để tính số
d,1<d<φ(n),sao cho e.d ≡ 1 (mod φ(n))

B5 : Khóa công khai là (n,e) ,


Khóa bí mật là (d)
Ví dụ
Xây dựng các tham số cho một hệ mã hóa RSA:
B1: A chọn q =7 p = 17
B2 : A tính :
n = q * p = 7*17 = 119
φ(n) = (q-1)*(p-1) = 6*16 = 96
B3: A chọn e=5 thỏa mãn gcd(5,96)=1
B4 : Tính d thỏa mãn
ed ≡ 1mod φ(n) ⇔ 5d ≡ 1mod96
 ⟹ 5d = 1+k96
Với k = 4 thì tìm được d = 77
B5: Khóa công khai của A là : (119,5)
Khó bí mật của A là : 77
- cũng có thể chọn khóa công khai của A là (119.77)
và khóa bí mật là 5
Mã hóa
Giả sử B cần gửi bản tin M cho A với ( M ≤ n ) B thực hiện các bước sau:

Bước 2: nhận khóa công khai của A ( n,e).

Bước 2: B tính mã hóa

C ≡ Me mod n

Bước 3 : B gửi mã C cho A.


Ví dụ
Xây dựng một hệ mật mã RSA để gửi bản tin M = CRYPTOGRAPH từ B đến A
Tạo khóa:
Bước 1 : A chọn q = 43 và p = 59
Bước 2 : A tính n = q * p = 43*59 = 2537
φ(n)=(q-1)*(p-1) = 42*58 = 2436
Bước 3: A chọn e = 1537
Bước 4 : A tính d = e-1 =1537-1 = 517
Bước 5 : khóa công khai A : (n,e) = (2537,1537);
khóa bí mật của A: d = 517
Mã hóa:

Bên B biến đổi bản tin M = CRYPTOGRAPH như sau


Chuyển đổi từ Hex to Bin
C sẽ tương ứng với số 43 ( 4 và 3) khi ta chuyển nhị phẩn ta chuyển từng số một
4(hex)  ⟹ 0100(Bin) và 3(hex)  ⟹0011(Bin) và như thế số 43 sẽ chuyển thành
8bit nhị phân tương ứng là:
43(hex) ⇔0100.0011 . Tương tự như vậy ta tiến hành chuyển toàn bộ 11 chữ số
của M biểu diễn như sau
Chuỗi bit của bản tin gồm 88 bit vậy chia B thành 8 khối mỗi khối 11 bit như sau :

Sau đó chuyển 8 khối này về giá trị thập phân tương ứng
M = CRYPTOGRAPH
Tiến hành mã hóa từng khối Mi để có cách khối mã Ci tương ứng như sau:
Giải mã
Tiến hành giải mã từng khối bản mã Ci để các khối Mi theo nguyên tắc giải mã:

Ví dụ :
M(1) = ( C1 )d mod n = 905517mod 2537 = 538
Các vấn đề điểm bất động trong RSA
Xét hệ mật RSA với các tham số (n,e) = (35,17) với q=5 p=7 Giả sử bảng tin M bằng 8 ta thấy:

C = Me mod n =817mod35=8

Tức là M = C như vậy không che dấu được thông tin

Với hệ mật mã RSA có các tham số công khai là(n,e) với n=q*p thì bản tin không thể che dấu
được được tính như sau
Ví dụ

Với hệ mật mã RSA với (n,e)=(35,3) với q=5 p=7 thì số bản tin không che dấu được là
N = [1+UCLN(2,4)]*[1+UCLN(2,6)] = 9
Các điểm bất động là : M = {0,1,6,14,15,20,21,29,34}

Vậy xác suất gặp phải các bản tin không thể che dấu là 1/4
03
Bài toán xếp
ba lô
Dãy siêu tăng

 Định nghĩa : Dãy các số nguyên dương (a1, a2, ….,an) được gọi là dãy siêu tăng nếu
ai ≥ với ai > 0 ,2 ≤ i ≤ n

Ví dụ : Dãy số (1,2,4,8,16,32,64,128)
Bài toán xếp ba lô
Cho một tập hợp các gói có trọng lượng Mi , yêu cầu xếp các gói vào 1 ba lô chứa được trọng lượng S

Với : bi = 0 nếu gói Mi không được xếp vào ba lô


  bi = 1 nếu gói Mi được xếp vào ba lô
S = Mi Bài toán có : 2n phương án (2n vector nhị phân) nếu n
lớn (vài trăm)
=> Không thể giải ở thời gian thực

Ví dụ cho W = (4,3,9,1,12,17,19,23) và X = 35.

Một đáp án của bài toán là x = (01011010) vì:

0x4 + 1x3 + 0x9 + 1x1 + 1x12 + 0x17 + 1x19 + 0x23 = 35

Ta định nghĩa một dãy trọng số W là siêu tăng (superincreasing knapsack) nếu mỗi phần tử của
dãy đều lớn hơn tổng các phần tử phía trước nó
Bài toán xếp ba lô
 • Độ phức tạp của BT ~n (Không phải 2 n)
VÀO: Dãy siêu tăng M = {M1,M2, …, Mn } và một số nguyên S là tổng của một tập
con trong M
RA : b=(b1,b2 ,…,bn) trong đó bi (0,1) sao cho: Mi =S (Phương án sắp xếp)
Bước 1: i n
Bước 2: Chừng nào i ≥1 hãy thực hiện:
Nếu
S ≥ Mi thì bi  1 và S  S – Mi
ngược lại: bi  0
ii-1
Bước 3: Return (b)
Ví dụ
Bước 1:i = 7

Bước 2:
i = 7 : 57 < 64 → b7 = 0,i = 6
i = 6: 57 > 32 → b6 = 1, S = 57 - 32 = 25;i = 5
i = 5: 25 > 16 → b5 = 1, S = 25 -16 = 9; i = 4
i = 4: 9 > 8 → b4 = 1, S = 9 - 8 = 1; i = 3
i = 3:1 < 4 → b3 = 0; i = 2
i = 2: 1 < 2 → b2 = 0; i = 1
i =1:1 = 1 → b1 = 1, S = 1-1 = 0; i = 0

Bước 3: ta có phương án sắp xếp: b = (b1,b2,...,b7 ) = (1, 0, 0,1,1,1, 0)


04
Hệ mật mã
Merkle - Hellman
Thuật toán tạo khóa
 
Mỗi bên liên lạc tạo cho mình một cặp khóa khoá công khai - khoá bí mật theo các
bước sau đây:
Bước 1: Chọn một dãy siêu tăng M = {M1,M2, …, Mn } và một giá trị modulo M thỏa mãn:
M ≥(M là phần tử thứ n +1 của dãy siêu tăng)
Bước 2: Chọn một số nguyên ngẫu nhiên W (1 < W < M ) sao cho (W, M) = 1. (Dễ
nhất là chọn M là số nguyên tố)
Bước 3: Tính ai ≡ WMi mod M, với i =1,2,n,……
Bước 4:
+ Khóa công khai: A = (a1, a2, ….,an) dãy ngẫu nhiên
+ Khóa bí mật: (M,W, {M1,M2, …, Mn } )
Mã hóa

 
B cần gửi bản tin m = (m1, m2, ….,mn) cho A. B thực hiện các bước sau:

Bước 1: B nhận khóa công khai của A: (M,W, {M1,M2, …, Mn } )

Bước 2: B tính C =ai

Bước 3: B gửi bản mã C cho A


Giải mã

 
A nhận bản mã C và tiến hành giải mã theo các bước sau:
Bước 1: A tính d = W-1C mod M= Mi

(Chú ý: d ≡ W-1C ≡ W-1ai =W-1WMi = Mi )

Do (W,M)= 1 nên sẽ tồn tại W-1 việc tìm W-1 có thể theo thuật toán Euclid mở rộng.
Bước 2: Sử dụng thuật giải bài toán xếp ba lô trong trường hợp dãy siêu tăng để tính
d = Mi và tìm lại được m = (m1, m2, ….,mn)
  dụ:

Tạo khóa:
• B1: + A chọn ngẫu nhiên: M1 ∈[1,16] ; M2 ∈ [17,32] ;
M3 ∈ [33,64] ; M4 ∈ [113,128]
+ Chọn dãy siêu tăng:Mi = 5,23,57,119 ; = 204;
→ Chọn M = 257
• B2: Chọn một số ngẫu nhiên W = 113, → W-1 = Wφ(M)-1 mod M → W-1 = 113255 mod 257 = 116
• B3: Tính các ai ≡ W.Mi mod M; i = 1…n
a1 = 113.5mod257 = 51; a2 = 113.23mod257 = 29
a3 = 113.57mod257 = 16; a4 = 113.119mod 257 = 83

• B4: + Khóa CK: A = (a1 , a2 , a3 , a4) = (51, 29, 16, 83)


+ Khóa BM: (M,W,{M1 , M2, M3, M4}) = (257,113,{5,23,57,119})
 Mã hóa :
B cần gửi bản tin m = (1,1,0,1) cho A
+ B1 : B nhận khóa cộng khai của A: A = (a1 , a2 , a3 , a4) = (51, 29, 16, 83)
+ B2 : B tính C = mi = 1x51+1x29+0x16+1x83 = 163
+ B3 : B gửi bản mã C = 163 cho A
Giải mã :
A nhận bản tin C= 163 và giải mã :
B1 : A tính d = W-1C mod M = 116.163mod257 =147
B2 : Sử dụng thuật giải toán xếp ba lô trong trường hợp dãy siêu tang
+ d = mi = 147
+ Khóa BM: (M,W,{M1 , M2, M3, M4}) = (257,113,{5,23,57,119})
i = 4 147 >119 → m4 = 1, d1 = 147-119= 28, i =3
i = 3 28 < 57 → m3 = 0, i = 2
i = 2 28 > 23→ m2 = 1; d2 = 28-23=5, i = 1
i = 1 5 = 5 → m1 = 1, d3 = 1 -1 = 0, i = 0
Và bản tin sau giải mã là : m=(m1, m2 , m3, m4) = (1,1,0,1)
CÁM ƠN THẦY VÀ CÁC BẠN ĐÃ
LẮNG NGHE PHẦN TRÌNH BÀY
CỦA NHÓM 04

You might also like