1. Trang chủ
  2. » Luận Văn - Báo Cáo

Hàm dẫn xuất kháo PKCS5

31 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • CHƯƠNG I TỔNG QUAN VỀ MẬT MÃ (0)
    • 1.1. GIỚI THIỆU CHUNG (2)
    • 1.2. KHÁI NIỆM HỆ MẬT MÃ (2)
    • 1.3. HỆ MẬT MÃ KHOÁ ĐỐI XỨNG (3)
    • 1.4 HỆ MẬT MÃ KHOÁ CÔNG KHAI (4)
    • 1.5. HÀM BĂM (8)
      • 1.5.1 Hàm băm MD5 (10)
    • 2.1. Giới thiệu về hàm dẫn xuất khoá công khai PKCS#5 (Public-Key Cryptography Standards 5) (18)
    • 2.2. Giá trị SALT và Giá trị lặp (18)
      • 2.2.1. Giá trị SALT (18)
      • 2.1.2. Số lần lặp (Iteration count) (19)
    • 2.3. Hàm dẫn xuất khoá (19)
      • 2.3.1. PBKDF1 (Password –based key derivation functions 1) 22 2.3.2. PBKDF2 (Password –based key derivation functions 2) 23 2.4. Các lược đồ mã hóa (20)
      • 2.4.1. PBES1 (23)
      • 2.5.1. PBMAC1 (26)
  • TÀI LIỆU THAM KHẢO (31)

Nội dung

Tìm hiểu tổng quan về các hệ mật mã đối xúng, hệ mật mã công khai; các hàm dẫn xuất khoá. Chi tiết hàm dẫn xuất khoá PKCS5 và ứng dụng trong thực tế

TỔNG QUAN VỀ MẬT MÃ

GIỚI THIỆU CHUNG

Mã hóa đóng vai trò quan trọng trong việc giữ bí mật thông tin từ thời xa xưa, với những hình thức sơ khai xuất hiện trong nền văn minh Ai Cập cổ đại Trải qua thời gian, mã hóa được ứng dụng rộng rãi, đặc biệt trong lĩnh vực quân sự, chính trị và ngoại giao Quá trình mã hóa bao gồm tạo bản mã từ văn bản gốc dựa trên khóa mật mã có sẵn, chỉ có người sở hữu khóa này mới có thể giải mã để hiểu được nội dung Thuật toán lập mã và giải mã được sử dụng để chuyển đổi văn bản gốc sang bản mã và ngược lại, tuy nhiên, bí mật cần được giữ kín chính là khóa mật mã Bên cạnh đó, mã thám hay phá khóa là hành động ngược lại, cố gắng giải mã thông tin bị đánh cắp.

KHÁI NIỆM HỆ MẬT MÃ

Hệ mật mã được định nghĩa là một bộ năm (P, C, K, E, D), trong đó:

- P là tập hữu hạn các các bản rõ có thể

- C tập hữu hạn các bản mã có thể

- K là tập hữu hạn các khoá có thể

- E là tập các hàm lập mã

- D là tập các hàm giải mã Với mỗi k  K, có một hàm lập mã ek  E, ek: P  C và một hàm giải mã dk D, dk: C  P sao cho dk(ek(x)) = x,  x  P

Quá trình mã hoá và giải mã

HỆ MẬT MÃ KHOÁ ĐỐI XỨNG

Các phương pháp mã hóa cổ điển đã được sử dụng từ khoảng 4000 năm trước bởi người Ai Cập.* Hai phương pháp mã hóa cổ điển chính là phép thay thế và phép chuyển dịch.* Phép thay thế thay thế một chữ cái bằng một chữ cái khác, trong khi phép chuyển dịch sắp xếp lại các chữ cái theo một thứ tự khác.

Hệ mã chuẩn DES được xây dựng tại Mỹ trong những năm 70 theo yêu cầu của Văn phòng quốc gia về chuẩn (NBS) và được sự thẩm định của an ninh quốc gia là một ví dụ về mật mã cổ điển DES kết hợp cả hai phương pháp thay thế và chuyển dịch DES thực hiện mã hoá trên từng khối bản rõ là một xâu 64 bit, có khoá là một xâu 56 bit và cho ra bản mã cũng là một xâu 64 bit Hiện nay, DES và biến thể của nó (3DES) vẫn được sử dụng thành công trong nhiều ứng dụng.

Trong các hệ mã đối xứng chỉ có một khoá được chia sẻ giữa các bên tham gia liên lạc Cứ mỗi lần truyền tin bảo mật, cả người gửi A và người nhận

B cùng thoả thuận trước với nhau một khoá chung K, sau đó người gửi dùng eK để lập mã cho thông báo gửi đi và người nhận dùng dK để giải mã bản mật mã nhận được Người gửi và người nhận có cùng một khoá chung K, được giữ bí mật dùng cho cả lập mã và giải mã Những hệ mật mã cổ điển với cách sử dụng trên được gọi là mật mã khoá đối xứng hay còn gọi là mật mã khoá bí mật. Độ an toàn của hệ mật mã đối xứng phụ thuộc vào khoá Nếu để lộ khoá thì bất kỳ người nào cũng có thể mã hoá và giải mã thông điệp.

Ư điểm nổi bật của mật mã khóa đối xứng là thiết kế một hệ mật mã bảo mật cao khá dễ dàng về mặt lý thuyết Tuy nhiên, ngoài việc cần nguồn sinh khóa ngẫu nhiên, vấn đề phân phối, lưu trữ, bảo mật và thỏa thuận khóa là thách thức lớn trong mạng truyền thông hiện đại Để giải quyết tình trạng lưu trữ khối lượng khóa quá lớn đáp ứng nhu cầu mã dịch, các hệ mật mã khối như DES với độ dài khóa vừa phải hoặc các hệ mật mã dòng sử dụng khóa sinh từ nguồn giả ngẫu nhiên bằng thuật toán được nghiên cứu sử dụng.

Mặc dù đã thực hiện việc mã hoá và giải mã bằng các hệ mật mã khối hay bằng thuật toán sinh khoá như đã nêu ở trên thì vấn đề phân phối và thoả thuận khoá vẫn phải được thực hiện Như vậy phân phối và thoả thuận khoá là một vấn đề chưa thể được giải quyết trong các hệ mật mã khoá đối xứng.

HỆ MẬT MÃ KHOÁ CÔNG KHAI

Để giải quyết vấn đề phân phối và thoả thuận khoá của mật mã khoá đối xứng, năm 1976 Diffie và Hellman đã đưa ra khái niệm về hệ mật mã khoá công khai và một phương pháp trao đổi công khai để tạo ra một khoá bí mật chung mà tính an toàn được bảo đảm bởi độ khó của một bài toán toán học cụ thể (là bài toán tính “logarit rời rạc”) Hệ mật mã khoá công khai hay còn được gọi là hệ mật mã phi đối xứng sử dụng một cặp khoá, khoá mã hoá còn gọi là khoá công khai (public key) và khoá giải mã được gọi là khoá bí mật hay khóa riêng(private key) Trong hệ mật này, khoá mã hoá khác với khoá giải mã Về mặt toán học thì từ khoá công khai rất khó tính được khoá bí mật Biết được khoá này không dễ dàng tìm được khoá kia Khoá giải mã được giữ bí mật trong khi khoá mã hoá được công bố công khai Một người bất kỳ có thể sử dụng khoá công khai để mã hoá tin tức, nhưng chỉ có người nào có đúng khoá giải mã mới có khả năng xem được bản rõ.

Người gửi A sẽ mã hoá thông điệp bằng khóa công của người nhận và người nhận B sẽ giải mã thông điệp với khoá bí mật tương ứng của mình.

Quá trình này được mô tả trong hình 1.2 và 1.3.

Hình 1.2: Mã hoá thông điệp sử dụng khoá công khai P

Hình 1.3: Giải mã thông điệp sử dụng khoá bí mật của người nhận

Có nhiều hệ thống khoá công khai được triển khai rộng rãi như hệ RSA, hệ ElGamal sử dụng giao thức trao đổi khoá Diffie-Hellman và nổi lên trong những năm gần đây là hệ đường cong Elliptic Trong số các hệ mật mã trên thì hệ RSA là hệ được cộng đồng chuẩn quốc tế và công nghiệp chấp nhận rộng rãi trong việc thực thi mật mã khoá công khai.

Hệ mật mã RSA, do Rivest, Shamir và Adleman [8] tìm ra, đã được công bố lần đầu tiên vào tháng 8 năm 1977 trên tạp chí Scientific American Hệ mật mã RSA được sử dụng rộng rãi trong thực tiễn đặc biệt cho mục đích bảo mật và xác thực dữ liệu số Tính bảo mật và an toàn của chúng được bảo đảm bằng độ phức tạp của một bài toán số học nổi tiếng là bài toán phân tích số nguyên thành các thừa số nguyên tố Hệ mật mã RSA được mô tả như hình 1.4.

Hình 1.4: Sơ đồ hệ mật mã RSA

Việc phát minh ra phương pháp mã công khai tạo ra một cuộc “cách mạng” trong công nghệ an toàn thông tin điện tử Nhưng thực tiễn triễn khai cho thấy tốc độ mã hoá khối dữ liệu lớn bằng các thuật toán mã hoá công khai chậm hơn rất nhiều so với hệ mã hoá đối xứng Ví dụ, để đạt được độ an toàn như các hệ mã đối xứng mạnh cùng thời, RSA đòi hỏi thời gian cho việc mã hoá một văn bản lâu hơn ấp hàng ngàn lần Do đó, thay bằng việc mã hoá văn bản có kích thước lớn bằng lược đồ khoá công khai thì văn bản này sẽ được mã hoá bằng một hệ mã đối xứng có tốc độ cao như DES, IDEA,…sau đó khoá được sử dụng trong hệ mã đối xứng sẽ được mã hoá sử dụng mật mã khoá công khai Phương pháp này rất khả thi trong việc mã và giải mã những văn bản có kích thước lớn như được mô tả trong hình 1.5 và 1.6.

Hình 1.5: Mã hoá thông điệp sử dụng khoá bí mật S để mã thông điệp và khoá công khai P để mã khoá bí mật S

Hình 1.6: Giải mã thông điệp sử dụng khoá bí mật S để giải mã thông điệp và khoá bí mật P để giải mã khoá bí mật S

 Ưu và nhược điểm của hệ mật mã khoá công khai

Hệ mật mã khóa công khai ra đời để khắc phục hạn chế còn tồn đọng của hệ mật mã khóa đối xứng, mở ra cơ hội nghiên cứu và phát triển các hệ mật mã tiên tiến Tuy nhiên, điểm yếu cố hữu của hệ mật mã khóa công khai là tốc độ giải mã chậm do dựa trên những bài toán khó Nhược điểm này cản trở việc ứng dụng độc lập hệ mật mã khóa công khai.

Một vấn đề nữa nảy sinh khi sử dụng các hệ mật mã khóa công khai là việc xác thực mà trong mô hình hệ mật mã đối xứng không đặt ra Do các khoá mã công khai được công bố một cách công khai trên mạng cho nên việc đảm bảo rằng “khoá được công bố có đúng là của đối tượng cần liên lạc hay không?” là một kẽ hở có thể bị lợi dụng Vấn đề xác thực này được giải quyết cũng chính bằng các hệ mật mã khoá công khai Nhiều thủ tục xác thực đã được nghiên cứu và sử dụng như Kerberos, X.509… Một ưu điểm nữa của các hệ mật mã khoá công khai là các ứng dụng của nó trong lĩnh vực chữ ký số, cùng với các kết quả về hàm băm, thủ tục ký để bảo đảm tính toàn vẹn của một văn bản được giải quyết.

HÀM BĂM

Việc sử dụng các hệ mật mã và sơ đồ chữ ký số thường là mã hóa và ký số trên từng bit của thông tin, thời gian để mã hóa và ký sẽ tỷ lệ thuận với dung lượng của thông tin Thêm vào đó có thể xảy ra trường hợp: với nhiều bức thông điệp đầu vào khác nhau, sử dụng hệ mật mã, sơ đồ ký số giống nhau (có thể khác nhau) thì cho ra kết quả bản mã, bản ký số giống nhau (ánh xạ N-1: nhiều - một), như hình 1.10 Điều này sẽ dẫn đến một số rắc rối về sau cho việc xác thực thông tin.

Hình 1.10: Nhiều thông điệp nguồn cho cùng 1 kết quả đích sau mã hoá/ ký số

Các sơ đồ ký số thường chỉ được sử dụng để ký các bức thông điệp (thông tin) có kích thước nhỏ và sau khi ký, bản ký số có kích thước gấp đôi bản thông điệp gốc - ví dụ với sơ đồ chữ ký chuẩn DSS ký trên các bức thông điệp có kích thước 160 bit, bản ký số sẽ có kích thước 320 bit Trong khi đó trên thực tế, ta cần phải ký các thông điệp có kích thước lớn hơn nhiều, chẳng hạn vài chụcMegaByte Hơn nữa, để đáp ứng yêu cầu xác thực sau khi thông tin đến người nhận, dữ liệu truyền qua mạng không chỉ là bản thông điệp gốc, mà còn bao gồm cả bản ký số (có dung lượng gấp đôi dung lượng bản thông điệp gốc) Một cách đơn giản để giải quyết vấn đề trên (với thông điệp có kích thước lớn) này là chặt thông điệp thành nhiều đoạn 160 bit, sau đó ký lên các đoạn đó độc lập nhau Nhưng, sử dụng biện pháp này sẽ có một số vấn đề gặp phải trong việc tạo ra các chữ ký số:

- Thứ nhất: với một thông điệp có kích thước a , thì sau khi ký kích thước của chữ ký sẽ là 2 a (trong trường hợp sử dụng DSS).

- Thứ hai: với các chữ ký “an toàn” thì tốc độ chậm vì chúng dùng nhiều phép tính số học phức tạp như số mũ modulo.

Thứ ba, một vấn đề nghiêm trọng hơn nữa là sau khi ký, nội dung của thông điệp có thể bị xáo trộn thứ tự các đoạn hoặc mất mát một số đoạn nhất định, trong khi người nhận cần xác minh lại thông điệp Vì vậy, cần phải đảm bảo tính toàn vẹn của thông điệp, tránh tình trạng bị thay đổi hoặc mất mát thông tin sau khi ký.

Giải pháp cho các vấn đề vướng mắc đến chữ ký số là dùng hàm băm để trợ giúp cho việc ký số Hàm băm - hiểu theo một nghĩa đơn giản là hàm cho tương ứng một mảng dữ liệu lớn với một mảng dữ liệu nhỏ hơn - được sử dụng rộng rãi trong nhiều ứng dụng khác nhau của tin học, không chỉ thuộc phạm vi mật mã học.

Hàm băm được đề cập đến trong phạm vi luận văn là hàm băm một chiều, có tác dụng trợ giúp cho các sơ đồ ký số nhằm làm giảm dung lượng của dữ liệu cần thiết để truyền qua mạng Hàm băm ở đây được hiểu là các thuật toán không sử dụng khoá để mã hóa (ở đây ta dùng thuật ngữ “băm” thay cho “mã hoá”), nó có nhiệm vụ băm thông điệp được đưa vào theo một thuật toán h một chiều nào đó, rồi đưa ra một bản băm - văn bản đại diện - có kích thước cố định Giá trị của hàm băm là duy nhất và không thể suy ngược lại được nội dung thông điệp từ giá trị băm này Hàm băm một chiều h có một số đặc tính quan trọng sau:

- Với thông điệp đầu vào x thu được bản băm z = h(x) là duy nhất.

- Nếu dữ liệu trong thông điệp x thay đổi hay bị xóa để thành thông điệp x’ thì h(x’) ≠ h(x) Cho dù chỉ là một sự thay đổi nhỏ hay chỉ là xóa đi 1 bit dữ liệu của thông điệp thì giá trị băm cũng vẫn thay đổi Điều này có nghĩa là: hai thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng khác nhau.

- Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm. Nghĩa là với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể (thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h(x).

Một số thuật toán băm được biết đến nhiều là hàm băm dòng và hàm băm chuẩn như: [MD2], [MD4], [MD5], [SHA-1]

1.5.1 Hàm băm MD5 a Giới thiệu MD5

MD5 (Message-Digest algorithm 5) là một hàm băm để mã hóa với giá trị băm là 128bit Từng được xem là một chuẩn trên Internet, MD5 đã được sữ dụng rộng rải trong các chương trình an ninh mạng, và cũng thường được dùng để kiểm tra tính nguyên vẹn của tập tin

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4 (cũng do ông thiết kế, trước đó nữa là MD2) b Giải thuật MD5

MD5 biến đổi một thông điệp có chiều dài bất kì thành một khối có kích thước cố định 128 bits Thông điệp đưa vào sẻ được cắt thành các khối 512 bits. Thông điệp được đưa vào bộ đệm để chiều dài của nó sẻ chia hết cho 512 Bộ đệm hoạt động như sau:

- Trước tiên chèn bit 1 vào cuối thông điệp

- Tiếp đó là hàng loạt bit Zero cho tới khi chiều dài của nó nhỏ hơn bội số của 512 một khoảng 64 bit

- Phần còn lại sẽ được lấp đầy bởi một số nguyên 64 bit biểu diển chiều dài ban đầu của thông điệp Thuật toán chính của MD5 hoạt động trên một bộ

128 bit Chia nhỏ nó ra thành 4 từ 32 bit, kí hiệu là A,B,C và D Các giá trị này là các hằng số cố định Sau đó thuật toán chính sẻ luân phiên hoạt động trên các khối 512 bit Mỗi khối sẻ phối hợp với một bộ Quá trình xữ lý một khối thông điệp bao gồm 4 bước tương tự nhau, gọi là vòng (“round”) Mỗi vòng lại gồm

16 quá trình tương tự nhau dựa trên hàm một chiều F, phép cộng module và phép xoay trái…

Hình bên dưới mô tả một quá trình trong một vòng Có 4 hàm một chiều F có thể sử dụng Mỗi vòng sử dụng một hàm khác nhau

Hàm băm MD5 (còn được gọi là hàm tóm tắt thông điệp - message degests) sẻ trả về một chuổi số thập lục phân gồm 32 số liên tiếp

1.5.2 Hàm băm SHA-0 a Giới thiệu SHA-0

SHA-0 là phiên bản đầu tiên gồm các đặc tả ban đầu của thuật toán hàm băm an toàn đã được xuất bản vào năm 1993 dưới tiêu đề Secure Hash Standard , FIPS PUB 180, bởi cơ quan tiêu chuẩn Hoa Kỳ của cơ quan NIST(Viện Tiêu chuẩn và Công nghệ Quốc gia) Nó đã bị NSA thu hồi ngay sau khi xuất bản và bị thay thế bởi bản sửa đổi, được xuất bản vào năm 1995 trong FIPS PUB 180-1 và được gọi là SHA-1

Hàm băm SHA-0 sử dụng nguyên lý MD4 và mô hình Merkle-Damgard Đầu vào bị đệm và chia thành khối 512-bit Trong mỗi lần lặp, biến chuỗi 160-bit Ht được cập nhật theo khối Mt+1 Giá trị khởi tạo H0 là cố định, còn Hk là đầu ra của hàm băm.

Hàm nén SHA-0 được xây dựng dựa trên cấu trúc Davis-Meyer Nó sử dụng một hàm E như là một mật mã khối với Ht cho đầu vào tin nhắn và Mt+1 cho đầu vào khóa, cần phải có một feed-forward để phá vỡ tính không thể đảo ngược của quá trình: Ht+1 = E(Ht , Mt+1 ) ⊕ Ht , Ở đây toán tử ⨁ biểu thị phép cộng modulo 2 32 từ 32-bit bởi các từ 32- bit Hàm này bao gồm 80 bước (4 vòng 20 bước), mỗi phần xử lý một từ tin 32 bit Wi để cập nhật 5 thanh ghi nội bộ 32-bit (A, B, C, D, E) Các feed-forward bao gồm việc cộng modulo 2 32 trạng thái ban đầu với trạng thái cuối cùng của mỗi thanh ghi Vì đã sử dụng nhiều bit tin hơn so với số liệu sẵn có, nên việc mở rộng tin nhắn được xác định.

Mở rộng thông điệp: đầu tiên, khối thông điệp Mt được chia thành 16 từ 32-bit

W0 ,…, W15 Sau đó 16 từ này được mở rộng theo tuyến tính như sau:

Wi = Wi-16 ⨁ Wi-14 ⨁ Wi-8 ⨁ Wi-3 với 16 ≤ i ≤ 79.

Cập nhật trạng thái: Đầu tiên, biến chuỗi Ht được chia thành 5 từ 32 bit để điền vào 5 thanh ghi (A0, B0, C0, D0, E0) Sau đó chuyển đổi tiếp theo được thực hiện 80 lần:

Trong đó Ki là các hằng số được xác định trước và fi là hàm luận lý được định nghĩa trong bảng 1.

Feed-forward: Các tổng modulo 2 32 : (A0+A80), (B0+B80), (C0+C80), (D0+D80), (E0+E80) được nối thành các biến chuỗi Ht+1.

Giới thiệu về hàm dẫn xuất khoá công khai PKCS#5 (Public-Key Cryptography Standards 5)

Dẫn xuất khóa (Key Derivation) là việc tạo ra khóa để sử dụng từ một giá trị bí mật cho trước.

PKCS#5 (Public-Key Cryptography Standards 5 - Tiểu chuẩn mã hóa dựa trên password) là một tiêu chuẩn từ RSA Laboratories, định nghĩa các phương pháp mã hóa dựa trên mật khẩu an toàn, bao gồm các hàm dẫn xuất khóa và các lược đồ mã hóa Trong PKCS#5, mật khẩu được kết hợp với một giá trị Salt và được xử lý qua một hàm giả ngẫu nhiên nhiều lần để tạo ra một khóa dẫn xuất. Quá trình lặp đi lặp lại này làm tăng độ khó của các cuộc tấn công vét cạn bằng cách làm cho việc thăm dò mật khẩu trở nên khó khăn hơn PKCS#5 đóng vai trò quan trọng trong việc bảo vệ dữ liệu và tạo điều kiện cho việc mã hóa và xác thực dựa trên mật khẩu trong các hệ thống và ứng dụng mật mã.

Tiêu chuẩn PKCS#5 đề cập đến hai hàm dẫn xuất khóa chính: PBKDF1 và PBKDF2

Giá trị SALT và Giá trị lặp

Giá trị ngẫu nhiên được bổ sung vào mật khẩu có tác dụng tăng độ phức tạp và bảo mật Một khóa cá nhân được chọn từ quá trình này bằng cách áp dụng hàm dẫn xuất khóa (KDF), đảm bảo tính an toàn và khó đoán đối với những bên trái phép.

DK : Derived Key (Khóa dẫn xuất)

KDF: Key Derivation Function (Hàm dẫn xuất khóa)

- Giảm nguy cơ bị tấn công kiểu “từ điển” Nếu SALT có độ dài là 64 bit thì sẽ tạo ra được 2 64 khóa (DK) cho mỗi mật khẩu.

- Tránh tình trạng một khóa được sử dụng 2 lần Nếu SALT có độ dài là

64 bit thì xác xuất hai khoá bị trùng nhau là không đáng kể, cho tới khi tạo ra được 2 32 khóa Do đó Salt có thể được áp dụng vào một số kỹ thuật mã hóa và xác thực.

Một số khuyến nghị khi lựa chọn giá trị SALT

Nếu không quan tâm đến vấn đề nhiều bên sử dụng chung một mật khẩu với cùng phương thức mã hóa và xác thực dựa trên mật khẩu, SALT có thể được tạo ngẫu nhiên và không cần kiểm tra định dạng cụ thể của ứng dụng nhận Giá trị SALT nên có độ dài tối thiểu là 8 octet (64 bit).

+ Mặt khác, SALT nên chứa dữ liệu phân biệt rõ ràng với các hoạt động khác và chiều dài khác nhau, cộng thêm một phần giá trị ngẫu nhiên với ít nhất 8 octet (64bit), và phần dữ liệu đó cần được kiểm tra hoặc xác minh bởi bên nhận SALT Ví dụ, các SALT có thể có thông tin bổ sung chuỗi octet xác định liệu các khóa xuất phát là cho việc mã hóa, cho tin nhắn chứng thực, hoặc cho một số hoạt động khác.

2.1.2 Số lần lặp (Iteration count)

Là số lần lặp được sử dụng nhằm mục đích tăng chi phí tính tạo khoá từ mật khẩu, qua đó làm tăng độ khó của việc tấn công bằng brute force (tấn công vét cạn) Khi số lần lặp càng cao, thời gian cần thiết để tạo ra khóa từ mật khẩu càng lâu, làm cho việc tấn công nhằm đoán mật khẩu trở nên khó khăn và tốn kém hơn Cơ chế này là một sự đánh đổi giữa thời gian tạo ra key và độ phức tạp của key Việc mã hóa (chính xác hơn là số lần băm) sẽ được lặp lại n lần (theo tiêu chuẩn PKCS #5 thì n nhỏ nhất là 1000).

Hàm dẫn xuất khoá

Hàm dẫn xuất khóa tạo ra một khóa dẫn xuất từ một khóa cơ bản và các thông số khác Trong hàm dẫn xuất khóa dựa trên mật khẩu (PBKDF), khóa cơ bản là một mật khẩu và các thông số khác là giá trị SALT và số lần lặp Hai hàm dẫn xuất khoá được sử dụng trong tiêu chuẩn PKCS#5 là PBKDF 1 và PBKDF 2.

Một ứng dụng điển hình của các hàm dẫn xuất khóa được xác định ở đây có thể bao gồm các bước sau:

+ Chọn Salt (S) và một giá trị lặp (C)

+ Chọn chiều dài (tính theo octet) cho khoá dẫn xuất DK (dkLen)

+ Dùng hàm dẫn xuất khoá (PBKDF1 hoặc PBKDF2) cho Password, S,

C, dkLen để tạo ra khoá dẫn xuất DK

+ Xuất kết quả khoá dẫn xuất DK

2.3.1 PBKDF1 (Password –based key derivation functions 1)

PBKDF1 sử dụng một hàm băm (SHA-1, MD2 hoặc MD5) để tạo ra khoá dẫn xuất DK. Độ dài của khóa nguồn được giới hạn bởi chiều dài của hàm.

Với MD2(16 octets) ,MD5(16 octets) ,SHA-1(20 octets) tương thích với quá trình dẫn xuất khóa trong PKCS # 5 v1.5

PBKDF1 được khuyến cáo chỉ để tương thích với các ứng dụng hiện có, các khóa nó tạo ra có thể không đủ lớn cho một số ứng dụng khác

PBKDF1 (P, S, c, dkLen) Đầu vào: mật khẩu dưới dạng chuỗi octet

C: Giá trị lặp, là một số nguyên dương dkLen: độ dài mong muốn của khoá dẫn xuất DK tính theo octet, tối đa 16bit khi sử dụng hàm băm MD2 hoặc MD5 hoặc tối đa 20bit khi sử dụng hàm băm SHA-1 Đầu ra: là hàm dẫn khoá DK, dkLen là một chuỗi octet

- Nếu độ dài khóa dẫn xuất (dkLen) nhập vào lớn hơn 16bit khi sử dụng hàm băm MD2 và MD5, hoặc lớn hơn 20bit khi sử dụng hàm băm SHA-1, thì xuất ra thông báo "khóa dẫn xuất quá dài" và dừng lại.

- Áp dụng hàm băm cơ bản (Hash) cho C lần lặp để kết hợp mật khẩu P và giá trị muối S, sau đó trích rút dkLen octet đầu tiên để tạo ra một khóa DK như sau:

T1 = Hash(P || S), với "||" là phép nối chuỗi.

DK = Tc, trong đó DK là khóa phái sinh và Tc nghĩa là lấy dkLen octet đầu tiên từ giá trị Tc.

- Xuất ra khóa dẫn xuất DK.

2.3.2 PBKDF2 (Password –based key derivation functions 2)

- PBKDF2 áp dụng một hàm giả ngẫu nhiên để dẫn xuất các khóa. PBKDF2 có ưu điểm là cho phép tạo ra khóa có độ dài gần như không giới hạn. Tuy nhiên, hiệu quả thực sự trong việc tìm kiếm và sử dụng khóa có thể bởi các cấu trúc của các cơ sở hàm giả ngẫu nhiên VD hàm giả HMAC-SHA-1.

PBKDF2 được đánh giá cao và khuyến khích sử dụng trong các ứng dụng mới vì tính an toàn và khả năng thích ứng của nó.

Cách thức PBKDF2 hoạt động:

P: mật khẩu là một chuỗi octet hLen là chiều dài octet của đầu ra hàm giả ngẫu nhiên

S: giá trị SALT là một chuỗi octet c: số lần lặp, một số nguyên dương dkLen là độ dài mong muốn theo octet của khóa dẫn xuất DK, là một số nguyên dương, tối đa là (2^32 – 1) × hLen Đầu ra:

DK: khóa dẫn xuất, một chuỗi dkLen octet

- Nếu dkLen > (2^32 – 1) × hLen, xuất ra “khóa dẫn xuất quá dài” và dừng lại.

- Giả sử l là số các khối hLen octet trong khóa dẫn xuất, được làm tròn lên, và r là số octet trong khối cuối cùng: l = [dkLen / hLen], r = dkLen – (l – 1) × hLen

- Đối với mỗi khối của khóa dẫn xuất, áp dụng hàm F được định nghĩa bên dưới với mật khẩu P, salt S, số lần lặp c, và chỉ số khối để tính toán khối:

Tl = F(P, S, c, l), với hàm F được định nghĩa là tổng lặp c đầu tiên của hàm giả ngẫu nhiên PRF áp dụng cho mật khẩu P và sự kết hợp của giá trị SALT S và chỉ số khối i:

F(P, S, c, i) = U1 XOR U2 XOR XOR Uc với U1 = PRF(P, S || INT(i)), U2 = PRF(P, U1),

- Tại đây, INT(i) là cách biểu diễn bốn octet của số nguyên i, với octet có trọng số lớn nhất đầu tiên.

- Ghép các khối và trích xuất dkLen octet đầu tiên để tạo ra khóa dẫn xuất DK:

- Xuất ra khóa dẫn xuất DK.

2.4 Các lược đồ mã hóa

Trong cài đặt đối xứng, một lược đồ mã hóa bao gồm một quá trình mã hóa và một quá trình giải mã Quá trình mã hóa tạo ra một bản mã từ một thông điệp dưới dạng một khóa, ngược lại quá trình giải mã sẽ phục hồi thông điệp từ bản mã dưới cùng một khóa

Trong một cơ chế mã hóa dựa trên mật khẩu, khóa là một mật khẩu Ứng dụng điển hình của cơ chế mã hóa dựa trên mật khẩu là phương pháp bảo vệ khóa cá nhân, nơi thông điệp chứa thông tin cá nhân, như trong PKCS #8 Các chương trình mã hóa được định nghĩa ở đây sẽ là thuật toán mã hóa phù hợp trong bối cảnh đó, hai phương án được quy định trong phần này: PBES1 và PBES2 PBES2 được khuyến nghị cho các ứng dụng mới; PBES1 được bao gồm trong PKCS #5 v2.0 chỉ để tương thích với PKCS #5 v1.5 và không được khuyến nghị cho các ứng dụng mới

PBES1 kết hợp hàm PBKDF1 với một thuật toán mã hóa khối cơ bản, có thể là DES hoặc RC2TM trong chế độ CBC PBES1 tương thích với các cơ chế mã hóa trong PKCS # 5 v1.5.

PBES1 được khuyến cáo chỉ để tương thích với các ứng dụng hiện có, kể từ khi nó hỗ trợ chỉ có hai cơ sở cơ chế mã hóa, mỗi trong số đó có một kích thước khóa (56 hoặc 64 bit) mà có thể không đủ lớn cho một số ứng dụng. a Quá trình mã hoá PBES1

Thao tác mã hóa PBES1 bao gồm các bước: mã hoá một thông điệp M theo một mật khẩu P để tạo ra một bản mã C:

- Chọn một giá trị S gồm 8 octet (64bit) và một số lần lặp c.

- Áp dụng hàm sinh khóa PBKDF1 cho mật khẩu P, giá trị "SALT" S, và số lần lặp c để tạo ra một khóa DK dài 16 octet:

- Tách khóa DK thành khóa mã hóa K có 8 octet đầu tiên của DK và một vector khởi tạo IV chứa 8 octet còn lại:

- Ghép M và một chuỗi đệm PS để tạo thành một thông điệp đã mã hóaEM:

EM = M || PS trong đó chuỗi đệm PS bao gồm 8-(||M|| mod 8) octet mỗi octet có giá trị 8- (||M|| mod 8) Chuỗi đệm PS sẽ thoả mãn một trong các yêu cầu sau:

- Độ dài trong octet của thông điệp được mã hóa sẽ là một bội số của 8 và nó có thể phục hồi thông điệp M rõ ràng từ thông điệp đã được mã hóa

Ngày đăng: 01/10/2024, 11:11

TỪ KHÓA LIÊN QUAN

w