Chương 2 : Tổng quan về mã hóa
2.1 Lý do chọn mã hóa
Từ các lỗ hổng bảo mật của các hệ thống nêu trên, tôi nhận thấy rằng password -key, các đặc tính sinh học dùng để xác thực có độ an tồn kém, kích thước khóa nhỏ, dễ giả mạo, nội dung thường ở dạng plaintext. Chính vì điều này, kẻ tấn cơng có thể khai thác để giả mạo, nhân bản hay tấn cơng vét cạn. Do đó, thay vì sử dụng các phương pháp trên, tơi sẽ sử dụng các thuật tốn mã hóa để tăng cường độ an tồn cho hệ thống. Các thuật tốn này đã được chứng minh có độ phức tạp cao rất khó để phá mã. Áp dụng các thuật tốn mã hóa giúp đảm bảo tính tồn vẹn, tính bảo mật và tính xác thực của ứng dụng. Tuy nhiên, hiện tại có rất nhiều thuật tốn mã hóa, mỗi thuật tốn lại có ưu và nhược điểm riêng, các phần bên dưới sẽ trình bày tổng quan về mã hóa, ưu – nhược điểm của các thuật toán phổ biến hiện nay, từ đó có được cơ sở lý thuyết để lựa chọn một thuật tốn mã hóa phù hợp cho hệ thống đang xây dựng. 2.2 Mã hóa đối xứng
2.2.1 Giới thiệu
Mã hóa đối xứng (symmetric cryptography, secret – key cryptography) là loại mã hóa sử dụng cùng một khóa cho việc mã hóa và giải mã. Có thể nói mã hóa đối xứng là mã hóa một khóa, mã hóa khóa bí mật hay mã hóa khóa thỏa thuận.
X Plaintext input Plaintext output , YE K X XD K Y , Encryption algorithm (e.g., AES) Decryption algorithm Secret key shared by
sender and recipient
Secret key shared by sender and recipient
K K
Hình 2.1: mơ hình mã hóa đối xứng [9] Mơ hình mã hóa đối xứng gồm có 5 thành phần:
- Plaintext (bản rõ): đây là văn bản, tin nhắn dễ hiểu ban đầu hoặc dữ liệu đưa vào thuật toán như đầu vào (input).
- Encryption algorithm (thuật tốn mã hóa): thuật tốn thực hiện các thay thế và biến đổi khác nhau trên plaintext.
- Secret key (khóa bí mật): khóa bí mật cũng là một đầu vào của thuật tốn mã hóa. Khóa bí mật là một giá trị độc lập so với bản rõ và thuật toán. Thuật toán sẽ tạo ra một giá trị đầu ra khác nhau tùy thuộc vào khóa cụ thể được dùng tại thời điểm đó. Các phép thay thế và biến đổi được thực hiện bởi các thuật tốn dựa trên khóa.
- Ciphertext (bản mã hóa): đây là văn bản, tin nhắn hay dữ liệu đã bị xáo trộn sau khi mã hóa. Nó phụ thuộc vào plaintext và secret key. Đối với cùng một plaintext, hai secret key khác nhau sẽ cho ra hai ciphertext khác nhau.
- Decryption algorithm (thuật toán giải mã): cơ bản là thực hiện lại thuật tốn mã hóa theo chiều ngược lại. Thuật tốn giải mã lấy ciphertext và secret key để tạo ra plaintext ban đầu.
2.2.2 Các yêu cầu của thuật tốn mã hóa đối xứng Hai yêu cầu để sử dụng an tồn mã hóa đối xứng là:
- Thuật tốn mã hóa mạnh: có cơ sở tốn học vững chắc, đảm bảo rằng dù cơng khai thuật tốn, nhưng việc thám mã là rất khó khăn và phức tạp nếu khơng biết khóa.
- Khóa phải được giữ bí mật:
Chỉ có người gửi và người nhận biết được khóa.
Có kênh an tồn để phân phối khóa giữa các người được chia sẻ khóa.
Mối liên hệ giữa khóa và bản mã là không thể suy ra được. 2.3 Mã hóa bất đối xứng
2.3.1 Giới thiệu
Mã hóa đối xứng dù rằng đã phát triển từ cổ đại đến hiện đại nhưng vẫn tồn tại hai điểm yếu sau:
- Vấn đề trao đổi khóa giữa người gửi và người nhận: cần phải có một kênh an tồn để trao đổi khóa sao cho khóa phải được giữ bí mật, chỉ có người gửi và người nhận biết. Điều này tỏ ra không hợp lý khi mà ngày nay khối lượng thông tin luân chuyển khắp thế giới là rất lớn. Việc thiết lập một kênh an tồn như vậy sẽ tốn kém về mặt chi phí và chậm trễ về mặt thời gian.
- Tính bí mật của khóa: khơng có cơ sở quy trách nhiệm nếu khóa bí mật bị tiết lộ
Năm 1976, Whitfield Diffie và Martin Hellman [10] đã tìm ra một phương pháp mã hóa khác có thể giải quyết cả hai vấn đề nêu trên, đó là mã hóa cơng khai (public key cryptography) hay còn gọi là mã hóa bất đối xứng (asymmetric cryptography). Đây có thể xem là một bước đột phá quan trọng nhất trong lĩnh vực mã hóa.
2.3.2 Mơ hình mã hóa bất đối xứng
Một mơ hình mã hóa bất đối xứng gồm 6 thành phần:
- Plaintext (bản rõ): đây là văn bản, tin nhắn dễ hiểu ban đầu hoặc dữ liệu đưa vào thuật toán như đầu vào (input).
- Encryption algorithm (thuật tốn mã hóa): thuật toán thực hiện các thay thế và biến đổi khác nhau trên plaintext.
- Public key (khóa cơng khai) và private key (khóa bí mật): đây là một cặp khóa đã được chọn để một dùng cho mã hóa và một dùng cho giải mã.
- Ciphertext (bản mã hóa): đây là văn bản, tin nhắn hay dữ liệu đã bị xáo trộn sau khi mã hóa. Nó phụ thuộc vào plaintext và key. Đối với cùng một plaintext, hai key khác nhau sẽ cho ra hai ciphertext khác nhau.
- Decryption algorithm (thuật toán giải mã): thuật tốn này dùng ciphertext và khóa phù hợp (matching key) để tạo ra plaintext ban đầu.
2.3.2.1 Mơ hình mã hóa dùng public key Bob s public-key ring Ted Joy Alice Plaintext input a PU a, YE PU X X Plaintext output a, X D PR Y a PR Alice s public key Transmitted ciphertext Encryption algorithm (e.g., ECC) Decryption algorithm Alice s private key Bob Alice
Hình 2.2: mơ hình mã hóa dùng public key [9] Các bước thực hiện như sau:
- Mỗi user (người dùng) tạo ra một cặp khóa, một khóa được sử dụng để mã hóa và một dùng để giải mã.
- Mỗi user đặt một trong hai khóa vào thư mục có thể truy cập được (public register) → đây là public key. Khóa cịn lại được giữ bí mật → đây là private key. Như hình 2.2, ta thấy, mỗi user có một tập hợp các public key thu được từ những người khác.
- Nếu Bob muốn gửi một message bí mật cho Alice, Bob mã hóa message bằng public key của Alice.
- Khi Alice nhận được message, Alice giải mã bằng private key của chính cơ ấy. Khơng người nhận nào khác có thể giải mã message vì chỉ có Alice biết được private của chính mình.
Mơ hình trên sử dụng public key để mã hóa và private key để giải mã, điều này cho phép các ứng dụng sử dụng mơ hình trên cung cấp khả năng bảo mật thơng tin.
2.3.2.2 Mơ hình mã hóa dùng private key Alice s public-key ring Ted Joy Alice Plaintext input b PU b, Y E PR X X Plaintext output b, X D PU Y b PR Bob s public key Transmitted ciphertext Encryption algorithm (e.g., ECC) Decryption algorithm Bob s private key Bob Alice
Hình 2.3: mơ hình mã hóa dùng private key [9]
Trong trường hợp này, Bob chuẩn bị một message X và mã hóa nó bằng cách sử dụng private key của mình trước khi gửi cho Alice.
b,
Y E PR X
Alice có thể giải mã message bằng cách sử dụng public key của Bob
b,
X D PU Y
Bởi vì message được mã hóa bằng private key của Bob do đó chỉ có Bob có thể tạo ra message. Vì vậy, message được dùng như một chữ ký điện tử (digital signature). Hơn nữa, không thể sửa đổi message mà khơng có private key của Bob. Vì vậy, message được xác thực cả về nguồn phát và tính tồn vẹn của dữ liệu.
Điều quan trọng cần nhấn mạnh là q trình mã hóa được mơ tả trong mơ hình trên khơng cung cấp tính bảo mật. Các message được gửi đi được đảm bảo an toàn trước việc sửa đổi nhưng không thể chống lại việc nghe trộm, điều này là hiển nhiên bởi vì bất kỳ người nào cũng có thể giải mã message bằng cách sử dụng public key của người gửi.
2.3.2.3 Mơ hình kết hợp
Message source Encryption algorithm Encryption algorithm Decryption algorithm Decryption
algorithm Message dest.
Key pair source Key pair source a PR PUa b PR b PU X Y Z Y X Source A Destination B Hình 2.4: mơ hình kết hợp [9]
Với mơ hình này, chúng ta có thể cung cấp cả khả năng xác thực và bảo mật bằng cách sử dụng hai tầng mã hóa.
Bắt đầu bằng cách mã hóa message bằng private key của người gửi, điều này tạo thành chữ ký số - khả năng xác thực được cung cấp.
a,
Y E PR X
Tiếp theo, chúng ta mã hóa một lần nữa, sử dụng public key của người nhận
b, E a,
Z E PU PR X
Ciphertext cuối cùng (Z) chỉ có thể được giải mã bởi người nhận xác định trước – người có private key phù hợp. Vì vậy, tính bảo mật được cung cấp.
a, b,
X D PU D PR Z
Nhược điểm của phương pháp này là thuật toán phức tạp, phải thực hiện 4 lần mã hóa/ giải mã trong mỗi lần truyền thơng.
2.3.3 Ứng dụng của mã hóa bất đối xứng
Hệ thống mã hóa bất đối xứng được đặt trưng bởi việc sử dụng một thuật tốn mã hóa với hai key, một giữ bí mật làm private key và một làm public key. Tùy thuộc vào ứng dụng, người gửi sử dụng một là private key của người gửi hoặc public key của người nhận hoặc cả hai, để thực hiện một số chức năng mã hóa.
Chúng ta có thể phân loại sử dụng mã hóa bất đối xứng thành ba loại:
- Encryption/ decryption: người gửi mã hóa message bằng public key của người nhận
- Digital signature: người gửi “ký” message bằng private key của mình. - Key exchange: hai bên hợp tác để trao đổi một session key.
Một số thuật toán phù hợp cho cả ba ứng dụng, trong khi những cái khác chỉ có thể được sử dụng cho một hoặc hai trong số các ứng dụng nêu trên. Bảng sau cho thấy các ứng dụng được hỗ trợ bởi các thuật tốn mã hóa bất đối xứng.
Bảng 2: các thuật tốn mã hóa bất đối xứng và ứng dụng [9] Thuật toán Encryption/
Decryption
Digital Signature Key exchange
RSA Có Có Có
Elliptic Curve Có Có Có
Diffie -Hellman Khơng Khơng Có
DSS Khơng Có Khơng
2.4 Kết luận
Đến đây chúng ta có thể thấy mã hóa bất đối xứng là ưu điểm hơn so với mã hóa đối xứng. Trong các thuật tốn mã hóa bất đối xứng thì thuật tốn RSA và Elliptic Curve hỗ trợ cả ba ứng dụng (encryption/ decryption, digital signature và key exchange) do đó chương 3 sẽ tập trung phân tích ưu – nhược điểm hai thuật tốn nói trên để từ đó chọn một thuật tốn tối ưu nhất, ứng dụng cho hệ thống access control mới.
Bên cạnh đó, trong đề tài luận văn này tôi quyết định sử dụng mã hóa bất đối xứng theo mơ hình chữ ký điện tử cho hệ thống access control mới. Trong mơ hình
chữ ký điện tử, người dùng có thể chủ động hơn trong việc tạo cặp khóa, chỉ cần giữ private key của chính mình và phân phối public key đến module điều khiển access, không cần phải lưu trữ quá nhiều public key của các module điều khiển access như trong trường hợp dùng mơ hình mã hóa bằng public key. Việc phân phối public key của người dùng đến các module điều khiển access sẽ được trình này trong chương 4.
3 Chương 3: Thuật tốn mã hóa RSA và ECC
3.1 Thuật tốn mã hóa RSA 3.1.1 Giới thiệu 3.1.1 Giới thiệu
Thuật tốn được Ron Rivest, Adi Shamir và Len Adleman mơ tả lần đầu tiên vào năm 1977, tại Học viện Cơng nghệ Massachusetts (MIT) [11]. Tên của thuật tốn lấy từ 3 chữ cái đầu tiên của tên 3 tác giả.
Trước đó, vào năm 1973, Clifford Cocks, một nhà tốn học người Anh làm việc tại GCHQ, đã mơ tả một thuật tốn tương tự nhưng với khả năng tính tốn tại thời điểm đó thì thuật tốn này khơng khả thi và chưa bao giờ được thực nghiệm. Tuy nhiên, phát mình này chỉ được cơng bố vào năm 1997 vì được xếp vào loại tuyệt mật. Thuật toán 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). Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy nhiên do thuật tốn đã được cơng bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như khơng có giá trị bên ngồi Hoa Kỳ. Ngồi ra, nếu như cơng trình của Clifford Cocks đã được cơng bố trước đó thì bằng sáng chế RSA không thể được đăng ký.
3.1.2 Độ phổ biến và độ an toàn của RSA
Hiện tại, RSA đang là thuật tốn mã hóa bất đối xứng dùng nhiều nhất hiện nay, theo báo cáo của ECRYPT II [12], ta có bảng thống kê như sau:
Bảng 3: độ phổ biến và mức độ an toàn của RSA [12] Thuật tốn Kích thước
khóa
Mức độ phổ biến Mức độ an toàn Public Key Encryption Scheme
RSA PKCS#1 v 1.5 RSA OAEP RSA OAEP RSA OAEP Bất kỳ 1024 2048 ≥3072 *** * * * * * ** *** Public Key Signature Scheme
RSA PKCS# v1.5 1024 *** −
RSA PKCS# v1.5 2048 *** *
RSA PKCS# v1.5 ≥3072 − **
RSA PSS 2048 ** **
RSA PSS ≥3072 ** ***
Ghi chú:
- Mức độ phổ biến: mức đánh giá ba ngôi sao cho thấy mức độ triển khai rộng rãi nhất, khơng có sao nào cho thấy khơng có thơng tin thuật tốn đó được sử dụng.
- Mức độ an toàn: mức đánh giá ba ngơi sao chỉ ra rằng ECRYPT hồn tồn tin tưởng vào sự an tồn của thuật tốn và kích thước khóa tương ứng, khơng có sao nào cho thấy thuật tốn và kích thước khóa tương ứng khơng nên tiếp tục sử dụng.
Từ thống kê trên ta nhận thấy rằng RSA-1024 hiện tại vẫn đang dùng rất phổ biến nhưng khơng cịn đảm bảo độ an tồn.
3.1.3 Một số điểm yếu khác
Thuật tốn RSA đã được cơng khai vào năm 1977 và hết hạn bản quyền sáng chế vào năm 2000, do đó hiện nay có nhiều nghiên cứu tấn cơng vào thuật tốn này.
3.1.3.1 Năm cách tiếp cận có thể tấn cơng RSA
- Brute force (tấn công vét cạn): bằng cách thử tất cả các trường hợp của private key.
- Mathematical attack [13]: có nhiều phương pháp tấn công như: Integer Factoring attack, Wiener’s attack, Low public Exponent attack…
- Timing attack [14]: tấn công thời gian được sử dụng để phân tích sự khác biệt trong thời gian thực hiện thuật tốn mã hóa mà kết quả là do sự khác biệt trong các thông số đầu vào. Điều này giúp kẻ tấn cơng tìm thấy thơng tin bí mật, như hệ số mũ bí mật của RSA.
- Hardware fault-based attack [15]: gây ra lỗi phần cứng trong bộ tạo ra chữ ký điện tử RSA. Hiện nay, có thể sử dụng nền tảng FPGA để phá mã thu được private key của RSA-1024 trong khoảng 100 giờ.
Hình 3.1: fault-based attack RSA [15]
- Chosen ciphertext attack [16]: kiểu tấn công này khai thác các thuộc tính của thuật tốn RSA. Nó có thể thu hồi được plaintext, từ một ciphertext đã biết trong ít hơn log2n truy xuất oracle thực hiện các thuật toán, với n là hệ số RSA.
3.1.3.2 Back-door
Reuters thông tin rằng Cục an ninh quốc gia Hoa Kỳ (NSA) đã trả 10 triệu đô cho RSA (cơng ty sở hữu thuật tốn RSA) để tạo ra một hệ thống mật mã không đáng tin cậy được cài đặt mặc định trong phần mềm được sử dụng bởi một loạt chương trình trên internet và máy tính [17].
Hệ thống này gọi là Dual EC [18], là một bộ tạo số ngẫu nhiên, nhưng nó có lỗ hổng có chủ định – hay cịn gọi là “back door” cho phép NSA phá mã khi cần. 3.2 Thuật tốn mã hóa ECC
3.2.1 Giới thiệu
Đường cong elliptic – cũng như đại số hình học – được nghiên cứu rộng rãi trong vòng 150 năm trở lại đây, nhưng mãi đến năm 1985, hai nhà khoa học Neal Koblitz và Victor S. Miller đã độc lập nghiên cứu và đưa ra đề xuất ứng dụng lý thuyết toán học đường cong elliptic (elliptic curve) trên trường hữu hạn. Thành quả
này chính là tiền đề để áp dụng các lý thuyết của đường cong elliptic vào lĩnh vực mã hóa.
Ngày nay, hầu hết các sản phẩm và tiêu chuẩn có sử dụng thuật tốn mã hóa cơng khai để mã hóa và chữ ký điện tử thường dùng RSA. Nhưng chúng ta nhận thấy