bảo mật dữ liệu

18
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.

Upload: son-nguyen

Post on 21-Jan-2018

1.293 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Bảo mật dữ liệu

Lập trình mạng – Chương 8 1

BẢO MẬT DỮ LIỆUTRUYỀ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.

Page 2: Bảo mật dữ liệu

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

Page 3: Bảo mật dữ liệu

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

Page 4: Bảo mật dữ liệu

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

Page 5: Bảo mật dữ liệu

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

Page 6: Bảo mật dữ liệu

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)

Page 7: Bảo mật dữ liệu

Lập trình mạng – Chương 8 7

1.2 Các phương pháp mã hóa

Page 8: Bảo mật dữ liệu

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)

Page 9: Bảo mật dữ liệu

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

Page 10: Bảo mật dữ liệu

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

Page 11: Bảo mật dữ liệu

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):

Page 12: Bảo mật dữ liệu

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).

Page 13: Bảo mật dữ liệu

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 nd

Page 14: Bảo mật dữ liệu

Lập trình mạng – Chương 8 14

4

Ñoái

Taùc

1

Ñoái

Taùc

2

ÑT1 gôûi public-key cho ÑT2

ÑT2 gôûi public-key cho ÑT1

ÑT1 gôûi döõ lieäu maõ hoùa cho ÑT2

vaø döõ lieäu kieåm tra tính toaøn veïn

ÑT2 gôûi döõ lieäu maõ hoaù cho ÑT1

vaø döõ lieäu kieåm tra tính toaøn veïn

1

2

3

5

6

8

7

Ví dụ giao thức mã hoá public key

Page 15: Bảo mật dữ liệu

Lập trình mạng – Chương 8 15

1.3 Ví dụ mã hóa trong Java.

1. import java.security.*; import java.security.spec.*; import java.security.interfaces.*;

2. import javax.crypto.*; import javax.crypto.spec.*;

3. import javax.crypto.interfaces.*; import com.sun.crypto.provider.SunJCE;

4. //…

5. SunJCE jce = new SunJCE();

6. Security.addProvider(jce);

7. System.out.println("BANK SERVER receives Client's public key");

8. byte[] clientPubKeyEnc = SocketUtil.receive(in);

9. KeyFactory serverKeyFac = KeyFactory.getInstance("DH");

10. X509EncodedKeySpec x509KeySpec =

11. new X509EncodedKeySpec(clientPubKeyEnc);

12. PublicKey clientPubKey = serverKeyFac.generatePublic(x509KeySpec);

13. DHParameterSpec dhParamSpec = ((DHPublicKey)clientPubKey).getParams();

14. System.out.println("SERVER: Generate DH keypair with Client ...");

15. KeyPairGenerator serverKeyPairGen = KeyPairGenerator.getInstance("DH");

16. serverKeyPairGen.initialize(dhParamSpec);

17. KeyPair serverKeyPair = serverKeyPairGen.generateKeyPair();

Page 16: Bảo mật dữ liệu

Lập trình mạng – Chương 8 16

1.3 Ví dụ mã hóa trong Java.

18. System.out.println("BANK SERVER: Initialize KeyAgreement with Client...");

19. KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH");

20. serverKeyAgree.init(serverKeyPair.getPrivate());

21. byte[] serverPubKeyEnc = serverKeyPair.getPublic().getEncoded();

22. SocketUtil.send(out,serverPubKeyEnc);

23.

24. serverKeyAgree.doPhase(clientPubKey, true);

25. byte[] serverSharedSecret = serverKeyAgree.generateSecret();

26. System.out.println("BANK SERVER's Secret-Key with WebSiteClient : "+

27. CipherUtil.toHexString(serverSharedSecret));

28.

29. serverKeyAgree.doPhase(clientPubKey, true);

30. SecretKey serverDesKey = serverKeyAgree.generateSecret("DES");

31. Cipher serverCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

32. Mac serverMac = Mac.getInstance("HmacSHA1");

33. serverMac.init(serverDesKey);

Page 17: Bảo mật dữ liệu

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. }

Page 18: Bảo mật dữ liệu

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