1. Lập trình mạng – Chương 8 1
BẢO MẬT DỮ LIỆU
TRUYỀN TRÊN MẠNG
1.1 Các vấn đề về bảo mật dữ liệu
1.2 Các phương pháp mã hóa dữ liệu
1.3 Ví dụ mã hóa trong Java.
2. Lập trình mạng – Chương 8 2
1.1 Các vấn đề về bảo mật dữ liệu
• Secrecy: Thông tin truyền đi chỉ được phần tử gởi và nhận đọc mà
thôi.
• Authentication: Xác định đúng đối tác trước khi thực hiện một giao
dịch trên mạng.
• Non-repudiation: Chứng minh được chính đối tác đã gởi thông tin.
• Integrity control: Thông tin truyền đảm bảo không bị thêm bớt trong
quá trình truyền
3. Lập trình mạng – Chương 8 3
1.1 Các vấn đề về bảo mật dữ liệu
• Các nguy cơ tính bảo mật bị đe dọa:
• Thông tin bị đánh cắp:
• NIC card có thể lấy các thông tin không phải của máy mình
A
B
C
src:B dest:A payload
4. Lập trình mạng – Chương 8 4
1.1 Các vấn đề về bảo mật dữ liệu
• Các nguy cơ tính bảo mật bị đe dọa(tt):
• Thông tin giả mạo
• Chương trình giả mạo phần tử gởi để gởi cho phần tử nhận ( C giả mạo B gởi cho A)
A
B
C
src:B dest:A payload
5. Lập trình mạng – Chương 8 5
1.1 Các vấn đề về bảo mật dữ liệu
• Nguy cơ tấn công DOS (Denial of service)
• Tấn công bằng cách gởi nhiều message để làm tê liệt hệ thống
A
B
C
SYN
SYNSYNSYN
SYN
SYN
SYN
6. Lập trình mạng – Chương 8 6
1.2 Các phương pháp mã hóa dữ liệu
• Bảo mật bằng cách mã hóa (cryptography) dữ liệu trước khi truyền.
• Các phương pháp mã hóa:
• Mã hóa đối xứng, giải thuật bí mật (private key)
• Giải thuật khóa công khai (public key)
8. Lập trình mạng – Chương 8 8
1.2 Các phương pháp mã hóa
• Các vấn đề cần quan tâm trong hiện thực mã hoá:
• Giải thuật mã hóa (cryptography algorithm)
• Giao thức mã hóa (cryptography protocol)
• Quản lý khóa (key management)
9. Lập trình mạng – Chương 8 9
1.2 Các phương pháp mã hóa
• Các giải thuật mã hóa đơn giản:
• Thay thế một ký tự bằng một ký tự hay nhóm ký tự khác:
• Ví dụ:
• Hoán vị thứ tự các ký tự theo một quy tắc
plaintext: abcdefghijklmnopqrstuvwxyz
ciphertext: mnbvcxzasdfghjklpoiuytrewq
Plaintext: bob. i love you. alice
ciphertext: nkn. s gktc wky. mgsbc
10. Lập trình mạng – Chương 8 10
1.2 Các phương pháp mã hóa
• Phương pháp mã hóa khoá bí mật:
• Giải thuật DES: Data Encryption Standard
• US encryption standard [NIST 1993]
• 56-bit symmetric key, 64 bit plaintext input
11. Lập trình mạng – Chương 8 11
1.2 Các phương pháp mã hóa
• Phương pháp mã hóa khóa công khai (public key):
12. Lập trình mạng – Chương 8 12
1.2 Các phương pháp mã hóa
• Giải thuật RSA (Rivest, Shamir, Adelson) cho giải thuật mã hóa khóa
công khai
• Chọn hai số nguyên tố p,q liền nhau
• Tính n = p.q, z = (p-1)(q-1)
• Chọn e<n là không có thừa số chung với z
• Chọn d sao cho ed mod z = 1
• Khóa công khai là (n,e). Khoá bí mật là (n,d).
13. Lập trình mạng – Chương 8 13
1.2 Các phương pháp mã hóa
• Giải thuật RSA(tt)
• Với mẫu bit m muốn gởi, tính c = me mod n và gởi c
• Bên nhận nhận được mẫu bit c, tính ra
m = cd mod n
m = (m mod n)e mod n
d
17. Lập trình mạng – Chương 8 17
1.3 Ví dụ mã hóa trong Java.
34. //Bank Server receives encrypted-data and Mac-code from Client
35. byte[] cipherTextBefore = SocketUtil.receive(in);
36. byte[] textMacBefore = SocketUtil.receive(in);
37.
38. //Bank Server decrypts encrypted-data and
39. //computes received-data's Mac-code
40. serverCipher.init(Cipher.DECRYPT_MODE, serverDesKey);
41. byte[] recoveredText = serverCipher.doFinal(cipherTextBefore);
42. byte[] textMacBeforePre = serverMac.doFinal(recoveredText);
43. //Bank Server process data
44. BankProcess bankPro;
45. if(java.util.Arrays.equals(textMacBefore, textMacBeforePre))
46. {
47. System.out.println("Data received from WebSiteClient is valid");
48. bankPro = new BankProcess(recoveredText,false);//no have error
49. }
18. Lập trình mạng – Chương 8 18
1.3 Ví dụ mã hóa trong Java.
50. else{
51. System.out.println("Data received is NOT valid");
52. }
53. byte[] result = bankPro.getResult();
54.
55. //Server encrypts result and computes its Mac-code
56. serverCipher.init(Cipher.ENCRYPT_MODE, serverDesKey);
57. byte[] cipherTextAfter = serverCipher.doFinal(result);
58. byte[] textMacAfter = serverMac.doFinal(result);
59.
60. //Server sends encrypted-result and Mac-code to client
61. SocketUtil.send(out,cipherTextAfter);
62. SocketUtil.send(out,textMacAfter);
63. //…
Dùng các packages JCE1.2.1 của Java