Professional Documents
Culture Documents
www.dtu.edu.vn
Chương 2
Mã hóa và các kỹ thuật nền tảng
GV: Nguyễn Minh Nhật
Email: nguyenminhnhat@duytan.edu.vn
Mob: 0905125143
www.dtu.edu.vn
Mục tiêu LOGO
1 Giới thiệu
2 Khái niệm
3 Cơ bản về mã hóa
Về toán học
Tập hợp (SET)
Tập hợp là tập hợp các đối tượng riêng biệt, ví dụ, X
= {1, 2, 3, 4, 5}.
Nhóm (GROUP)
Nhóm là một tập hợp giao hoán với một phép toán
kết hợp hai phần tử của tập hợp. Hoạt động nhóm
được đóng và được liên kết với một phần tử nhận
dạng được xác
Về toán học
Đóng (closed) có nghĩa là nếucác phần tử A và B
nằm trong tập hợp, thì phần tử kết quả sau khi
thực hiện thao tác trên các phần tử cũng nằm trong
tập hợp đó.
Liên kết (Associative) có nghĩa là việc nhóm các
yếu tố không ảnh hưởng đến kết quả của hoạt
động.
Trường (FIELD)
Trường là một tập hợp chứa cả nhóm cộng và nhóm
nhân. Chính xác hơn, tất cả các phần tử trong tập
hợp tạo thành một nhóm cộng và nhân.
Nó thỏa mãn các tiên đề cụ thể cho phép cộng và
phép nhân. Đối với tất cả các hoạt động của nhóm,
luật phân phối cũng được áp dụng. Luật quy định
rằng cùng một tổng hoặc sản phẩm sẽ được tạo ra
ngay cả khi bất kỳ điều khoản hoặc yếu tố nào được
sắp xếp lại.
AN ABELIAN GROUP
Một nhóm abel được hình thành khi phép toán trên
các phần tử của một tập hợp là giao hoán. Luật giao
hoán về cơ bản có nghĩa là việc thay đổi thứ tự của
các phần tử không ảnh hưởng đến kết quả của phép
toán, ví dụ, A X B = B X A.
A CYCLIC GROUP
Nhóm tuần hoàn là một loại nhóm có thể được tạo bởi
một phần tử duy nhất được gọi là trình tạo nhóm. Nói
cách khác, nếu thao tác nhóm được áp dụng nhiều lần
cho một phần tử cụ thể trong nhóm, thì tất cả các
phần tử trong nhóm có thể được tạo ra.
MODULAR ARITHMETIC
Còn được gọi là số học đồng hồ, các con số trong số
học mô-đun quấn quanh khi chúng đạt đến một số cố
định nhất định. Số cố định này là một số dương được
gọi là môđun và tất cả các hoạt động được thực hiện
liên quan đến số cố định này. Tương tự với một chiếc
đồng hồ, có các số từ 1 đến 12. Khi đến 12, số 1 bắt
đầu lại. Nói cách khác, số học này xử lý phần còn lại
sau phép toán chia. Ví dụ: 50 mod 11 là 6 vì 50/11
để lại phần còn lại của 6.
Về mật mã
Tính an toàn (confidentiality): Bảo đảm thông tin
không bị lộ hoặc bị đánh cắp bởi những cá nhân
không được phép.
Tính toàn vẹn dữ liệu (Data integrity ) : Bảo đảm
dữ liệu không bị thay đổi hay biến dạng trong quá
trình truyền hay sử dụng các các thuật toán mã hóa.
Tính xác thực (Authentication ): Đảm bảo các
thông điệp được gởi từ người gởi cho người nhận
đúng là của người nhận. Trong thực các mạng máy
tính cá nhân hoặc công cộng ( kể cả mạng Internet)
xác thực thông thường được thực hiện qua đăng
Về mật mã
Plaintext:thông điệp gốc (original message)
Ciphertext: mã hóa message (tin nhắn được mã hóa)
Cipher: thuật toán chuyển bản rõ sang bản mã
Key: thông tin được sử dụng trong mật mã chỉ người gửi / người
nhận mới biết
Encipher (mã hóa): chuyển đổi bản rõ sang bản mã
Decipher (giải mã): khôi phục bản mã từ bản rõ
Cryptography: nghiên cứu các nguyên tắc / phương pháp mã hóa
Cryptanalysis (phá mã): nghiên cứu các nguyên tắc / phương
pháp giải mã bản mã mà không cần biết khóa
Cryptology: nghiên cứu lĩnh vực của cả cryptography và
cryptanalysis
Trong đó:
- M: Văn bản gốc (Plaintext)
- C: Văn bản được mã hóa (Ciphertext)
- E: Hàm mã hóa (Encryption Function)
- D: Hàm giải mã (Decryption Function)
www.dtu.edu.vn Chương 2 - Mã hóa và các
Cơ bản về mật mã LOGO
Ý tưởng
Hàm mã hóa sắp xếp một đoạn 64 bit (“0” và “1”)
của văn bản rõ ở đầu vào thành 64 bit mã hóa ở
đầu ra với việc sử dụng khóa 56 bit.
Trong 64 bit này có 56 bit được phát sinh ngẫu
nhiên và được sử dụng trực tiếp trong thuật toán
8 bit còn lại không được dùng trong thuật toán mà
sử dụng để kiểm tra lỗi,
Kiểm tra tính chẵn lẻ trong mỗi 8 bit – byte của
key, tức là sẽ có một số lẻ các bit 1 trong mỗi 8 bit
của key.
x0
Biểu diễn dãy 64 bit x thành 2 thành phần L và R
Giai đoạn 2:
Xác định các cặp từ 32 bit Li, Ri với 1 i 16 theo
quy tắc sau:
Li = Ri-1
Ri = Li-1 f (Ri-1, Ki)
Với : biểu diễn phép tóan XOR trên 2 dãy bit
K1, K2, ..., K16 là các dãy 48 bit phát sinh từ khóa K
cho trước (Trên thực tế, mỗi khóa Ki được phát sinh
bằng cách hoán vị các bit trong khóa K cho trước).
Giai đoạn 2:
L i- 1 R i- 1
f K i
L i R i
Giai đoạn 3:
Áp dụng hoán vị ngược IP-1 đối với dãy bit R16L16,
thu được từ y gồm 64 bit. Như vậy, y = IP-1 (R16L16)
Hàm f được sử dụng bước 2 sẽ là: IP-1
Hàm f có gồm 2 tham số: Tham số thứ nhất A là
một dãy 32 bit, tham số thứ hai J là một dãy 48
bit. Kết quả của hàm f là một dãy 32 bit. Các bước
xử lý của hàm f(A, J)như sau:
Giai đoạn 3:
Giai đoạn 3:
Tham số thứ nhất A (32 bit) được mở rộng thành
dãy 48 bit bằng hàm mở rộng E. Kết quả của hàm
E(A) là một dãy 48 bit được phát sinh từ A bằng
cách hoán vị theo một thứ tự nhất định 32 bit của
A, trong đó có 16 bit của A được lập lại 2 lần trong
E(A).Thực hiện phép toán XOR cho 2 dãy 48 bit
E(A) và J, ta thu được một dãy 48 bit B.
Biểu diễn B thành từng nhóm 6 bit như sau:B =
B1B2B3B4B5B6B7B8
Giai đoạn 3:
Sử dụng 8 ma trận S1, S2,..., S8, mỗi ma trận Si có
kích thước 416 và mỗi dòng của ma trận nhận đủ
16 giá trị từ 0 đến 15.
Xét dãy gồm 6 bit Bj = b1b2b3b4b5b6, Sj(Bj) được xác
định bằng giá trị của phần tử tại dòng r cột c của
Sj, trong đó, chỉ số dòng r có biểu diễn nhị phân là
b1b6, chỉ số cột c có biểu diễn nhị phân là b2b3b4b5.
Bằng cách này, ta xác định được các dãy 4 bit Cj =
Sj(Bj), 1 j 8.
Giai đoạn 3:
Tập hợp các dãy 4 bit Cj lại. ta có được dãy 32 bit C
= C1C2C3C4C5C6C7C8.
Dãy 32 bit thu được bằng cách hoán vị C theo một
quy luật P nhất định chính là kết quả của hàm F(A,
J) các hàm được sử dụng trong DES.
Minh họa
1. Tạo key (tạo khóa mã hóa/giải mã)
String SECRET_KEY = "12345678";
SecretKeySpec skeySpec = new SecretKeySpec(SECRET_KEY.getBytes(),
"DES");
2. Cipher Info
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5PADDING");
Lưu ý:
DES = Data Encryption Standard.
ECB = Electronic Codebook mode.
PKCS5Padding = PKCS #5-style padding.
3. Mã hóa
String original = "stackjava.com";
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] byteEncrypted = cipher.doFinal(original.getBytes());
String encrypted = Base64.getEncoder().encodeToString(byteEncrypted);
www.dtu.edu.vn
Data Encryption Standard (DES) LOGO
4. Giải mã
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] byteDecrypted = cipher.doFinal(byteEncrypted);
String decrypted = new String(byteDecrypted);
5. Kết quả
original text: stackjava.com
encrypted text: xvHjRlZOjIxmi+R3h4/gUw==
decrypted text: stackjava.com
Xem thêm ở:
1. https://stackjava.com/demo/code-java-vi-du-ma-hoa-giai-ma
-voi-des.html
2. http://
nguyenquanicd.blogspot.com/2017/08/background-thuat-toan-
ma-hoa-va-giai-ma.html
Giới thiệu
Giới thiệu
Cơ sở thuật toán RSA dựa trên tính khó của bài toán
phân tích các số lớn ra thừa số nguyên tố:
“ phân tích số nguyên n lớn thành tích của 2 thừa số
nguyên tố p và q”. Dựa trên phát hiện của Clifford Cocks
-1973
Theo Cocks nếu n đủ lớn (khoảng 300 chữ số) thực
hiện 10150300 Nếu dùng máy tính tốc độ 1 tỷ phép
tính/giây, ta sẽ mất chừng...tỷ tỷ tỷ năm để phân tích
số.
1977 dựa vào ý tưởng trên, Rivest, Shamir và Adleman
(MIT) cuộc cách mạng trong lĩnh vực mật mã, cuộc
cách mạng mang tên RSA.
RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào
năm 1983 (Số đăng ký 4.405.829)
www.dtu.edu.vn Chương 2 - Mã hóa và các
Thuật toán RSA LOGO
Giới thiệu
Mô tả hoạt động
Sử dụng hai khóa: Khóa công khai(hay khóa công
cộng) và Khóa bí mật (hay khóa cá nhân).
Mỗi khóa là những số cố định sử dụng trong quá
trình mã hóa và giải mã.
Khóa công khai được công bố rộng rãi cho mọi người
và được dùng để mã hóa.
Những thông tin được mã hóa bằng khóa công khai
chỉ có thể được giải mã bằng khóa bí mật tương
ứng. Nói cách khác, mọi người đều có thể mã hóa
nhưng chỉ có người biết khóa cá nhân (bí mật) mới
có thể giải mã được.
Mã hóa
Giả sử Bob muốn gửi đoạn thông tin M cho Alice.
Đầu tiên Bob chuyển M thành một số m < n theo
một hàm có thể đảo ngược (từ m có thể xác định lại
được M) được thỏa thuận trước (Chuyển đổi từ văn
bản gố thành văn bản rõ): M m
Lúc này Bob có m và biết n cũng như e do Alice gửi.
Bob sẽ tính c là bản mã hóa của m theo công thức:
hoặc
Để mã hóa thông điệp M, người gởi cần thực hiện:
o Xác định public key từ KU={e,N}
o Tính: , ở đây 0<=m<N
o Cuối cùng Bob gởi c cho Alice
Giải mã
Alice nhận c từ Bob và biết khóa bí mật d. Alice có
thể tìm được m từ c theo công thức sau:
m
Biết m, Alice tìm lại được M theo phương pháp đã
thỏa thuận trước: m M
Quá trình giải mã hoạt động vì ta có:
Ví dụ:
1.Chọn 2 số nguyên tố ngẫu nhiên:
p = 17 - số nguyên tố thứ nhất (giữ bí mật hoặc
hủy sau khi tạo khóa)
q = 11 - số nguyên tố thứ hai (giữ bí mật hoặc hủy
sau khi tạo khóa)
2.Tính:
n = pq = 17*11= 187 - môđun (công bố công khai)
3. Tính ø(n):
ø(n) =(p–1)(q-1)=16×10=160
4. Lựa chọn e: gcd(e,160)=1 và 1<e<160
Chọn e=7 (số mũ công khai)
5. Xác định d: de=1 mod 160 và d < 160
www.dtu.edu.vn Chương 2 - Mã hóa và các
Thuật toán RSA LOGO
Ví dụ:
Giá trị của d là: d=23, do 23×7=161= 1×160+1(số
mũ bí mật)
6. Khóa công khai KU={7,187}
7. Giữ bí mật khóa private KR={23,17,11}
m
Giả sử cho thông điệp M = 88 (88<187)
Thông điệp mã hóa:C
Thông điệp giải mã:M = 88
www.dtu.edu.vn