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

(TIỂU LUẬN) mật mã ứng dụng trong an toàn thông tin

347 5 0

Đ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

Thông tin cơ bản

Tiêu đề (TIỂU LUẬN) Mật Mã Ứng Dụng Trong An Toàn Thông Tin
Thể loại tiểu luận
Định dạng
Số trang 347
Dung lượng 9,09 MB

Cấu trúc

  • 1.1 SƠ LƯỢC VỀ MẬT MÃ HỌC (14)
    • 1.1.1 Lịch sử của mật mã (14)
    • 1.1.2 Các mục tiêu của mật mã (15)
    • 1.1.3 Phân loại các loại mật mã (16)
  • 1.2 CÁC ỨNG DỤNG CỦA MẬT MÃ (18)
    • 1.2.1 Các ứng dụng trong thực tiễn (18)
      • 1.2.1.1 Ứng dụng trong đời sống thông tin, kinh tế, xã hội (18)
      • 1.2.1.2 Ứng dụng trong an ninh, quốc phòng (19)
    • 1.2.2 Ứng dụng của một số thành phần mật mã cơ bản (21)
      • 1.2.2.1 Dãy ngẫu nhiên, dãy giả ngẫu nhiên (21)
      • 1.2.2.2 Hàm băm (23)
      • 1.2.2.3 Mã dòng (25)
      • 1.2.2.4 Mã khối (27)
      • 1.2.2.5 Hệ mật khóa công khai (29)
      • 1.2.2.6 Chữ ký số (30)
    • 1.2.3 Ứng dụng trong các giao thức bảo mật (31)
      • 1.2.3.1 Xác thực đăng nhập trên Linux (31)
      • 1.2.3.2 Secure Shell (SSH) (32)
      • 1.2.3.3 SSL/TLS (35)
      • 1.2.3.4 Giao thức SET (Secure Electronic Transaction) (39)
      • 1.2.3.5 S/MIME (Secure/Multipurpose Internet Mail Extensions) (43)
      • 1.2.3.6 PGP, OpenPGP, GnuPG (44)
    • 1.3.3 Microsoft CryptoAPI (53)
    • 1.3.4 JCA, JCE (54)
  • 1.4 MỘT SỐ PHẦN MỀM HỖ TRỢ NGHIÊN CỨU MẬT MÃ (54)
    • 1.4.1 Maple (54)
    • 1.4.2 Mathematica (57)
  • 1.5 CÂU HỎI ÔN TẬP (58)
  • CHƯƠNG 2. MẬT MÃ DÒNG (60)
    • 2.1. KHÁI NIỆM MÃ DÒNG (60)
    • 2.2. CÁC ĐẶC TRƯNG (62)
      • 2.2.1. Độ phức tạp tuyến tính (62)
        • 2.2.1.1. Thanh ghi dịch phản hồi (62)
        • 2.2.1.2. Dãy ghi dịch (63)
        • 2.2.1.3. Định nghĩa độ phức tạp tuyến tính (65)
        • 2.2.1.4. Thuật toán Berlekamp-Massey (67)
        • 2.2.1.5. Phân bố độ phức tạp tuyến tính của dãy ngẫu nhiên . 59 2.2.2. Chu kỳ (71)
      • 2.2.3. Tự tương quan (73)
      • 2.2.4. Lực lượng một loại dãy (74)
      • 2.2.5. Các tính chất thống kê (75)
        • 2.2.5.1. Kiểm tra tần số đơn (kiểm tra bit đơn) (75)
        • 2.2.5.2. Kiểm tra seri (kiểm tra phân bố cặp bit) (76)
        • 2.2.5.3. Kiểm tra Poker (kiểm tra phân bố đoạn bít) (76)
        • 2.2.5.4. Kiểm tra loạt (76)
        • 2.2.5.4. Kiểm tra tự tương quan (77)
    • 2.3. CÁC NGUYÊN LÝ THIẾT KẾ MẬT MÃ DÒNG (79)
      • 2.3.1. Thiết kế mật mã dòng dựa trên các LFSR (80)
        • 2.3.1.1. Các bộ sinh tổ hợp phi tuyến (80)
        • 2.3.2.2. Kiểu phản hồi đầu ra (83)
        • 2.3.2.3. Kiểu đếm (83)
      • 2.3.3. Các mật mã dòng dựa trên mật mã khóa công khai (83)
      • 2.3.4. Các kiểu thiết kế khác (83)
    • 2.4. MỘT SỐ MẬT MÃ DÒNG: ỨNG VỚI DÒNG KHÓA LÀ DÃY BÍT, DÒNG KHÓA LÀ DÃY BYTE (84)
      • 2.4.1. Dòng khóa là dãy bít (84)
        • 2.4.1.1. Dãy sinh khóa Geffe P.R (84)
        • 2.4.1.2. DÃY D'BRUIJN (dãy phi tuyến chu kỳ cực đại) (85)
        • 2.4.1.3. Dãy được điều khiển bằng đồng hồ (87)
        • 2.4.1.4 Mã dòng dựa trên mật mã khóa công khai (89)
        • 2.4.1.4 Mã dòng Seal (91)
      • 2.4.1 Dòng khóa được sinh từ dãy byte (95)
    • 2.5. CHƯƠNG TRÌNH MAPLE THỰC HIỆN MỘT SỐ MẬT MÃ DÒNG: THUẬT TOÁN VÀ ĐỘ AN TOÀN (100)
      • 2.5.1. Dãy sinh khóa Geffe P.R (100)
      • 2.5.2. DÃY D'BRUIJN (dãy phi tuyến chu kỳ cực đại) (102)
      • 2.5.3. Dãy Shrinking (103)
    • 2.6 CÂU HỎI ÔN TẬP VÀ BÀI TẬP (105)
  • CHƯƠNG 3. MẬT MÃ KHỐI (107)
    • 3.1 ĐỊNH NGHĨA MÃ KHỐI (107)
    • 3.2 CÁC LOẠI CẤU TRÚC PHỔ BIẾN CỦA MÃ KHỐI (108)
      • 3.2.1 Các thuật toán lược đồ khóa (109)
      • 3.2.2 Các mạng thay thế- hoán vị (SPN) (109)
      • 3.2.3 Mạng Feistel (111)
      • 3.2.4 Các cấu trúc mã khối khác (113)
      • 3.4.1 Xác suất lượng sai (119)
      • 3.4.2 Sơ lược về tấn công lượng sai lên mã khối (120)
    • 3.5 NGUYÊN LÝ THIẾT KẾ MÃ KHỐI (124)
    • 3.6 GIỚI THIỆU MỘT SỐ MÃ KHỐI: CẤU TRÚC, THUẬT TOÁN VÀ ĐỘ AN TOÀN (125)
      • 3.6.1 Chuẩn mã hóa dữ liệu DES (125)
        • 3.6.1.1 Thuật toán mã hoá (126)
        • 3.6.1.2 Lược đồ tạo hệ thống khoá (130)
        • 3.6.1.3 Giải mã DES (131)
        • 3.6.1.4 Độ an toàn của DES (132)
      • 3.6.2 Mã khối Camellia (134)
        • 3.6.2.1 Cấu trúc của Camellia (136)
        • 3.6.2.2 Các thành phần của Camellia (151)
        • 3.6.2.3 Độ an toàn của Camellia (158)
        • 3.6.2.4. Dữ liệu thử nghiệm của Camellia (159)
    • 3.7 THUẬT TOÁN VÀ CHƯƠNG TRÌNH TÍNH XÁC SUẤT LƯỢNG (160)
      • 3.7.1 Thuật toán tính các xác suất lượng sai và tuyến tính cực đại 148 (160)
      • 3.7.2 Chương trình tính các xác suất lượng sai và tuyến tính cực đại trên Maple (161)
        • 3.7.2.1 Chương trình tìm xác xuất lượng sai, tuyến tính cực đại với hộp Sbox của AES (162)
        • 3.7.2.2 Chương trình tìm xác xuất lượng sai, tuyến tính cực đại với hộp Sbox1 của Camelia (165)
      • 4.1.2. Luật nhóm (170)
      • 4.1.3. Tính kP (173)
      • 4.1.4. Dạng không kỳ dị (173)
      • 4.1.6. Đường cong elliptic trên trường có đăc số 2 (175)
    • 4.2. NHÚNG MỘT SỐ VÀO ĐƯỜNG CONG ELLIPTIC (178)
      • 4.2.1. Chuyển thông báo thành số nguyên thuộc F p (178)
      • 4.2.2. Nhúng bản rõ (178)
    • 4.3. ĐẾM ĐƠN GIẢN SỐ ĐIỂM TRÊN ĐƯỜNG CONG ELLIPTIC (181)
    • 4.4. TÍNH BẬC CỦA MỘT ĐIỂM (181)
    • 4.5. MỘT SỐ HỆ MẬT, HỆ CHỮ KÝ SỐ TRÊN ĐƯỜNG CONG (184)
      • 4.5.1. Bài toán lô ga rít rời rạc (DLP) trên đường cong elliptic (184)
      • 4.5.2. Các hệ mật đường cong Elliptic (185)
        • 4.5.2.1. Hệ mật Elgamal Elliptic (185)
        • 4.5.2.2. Lập mã Massey-Omura (185)
        • 4.5.2.3. Hệ mật trên đường cong elliptic Menezes- Vanstone (186)
      • 4.5.3. Các hệ chữ ký trên đường cong Elliptic (187)
        • 4.5.3.1. Sơ đồ chữ ký số Elgamal Elliptic (187)
        • 4.5.3.2. Chuẩn chữ ký số Elliptic (ECDSA) (188)
      • 4.5.4. Giao thức trao đổi khóa (189)
    • 4.6. CHỌN ĐƯỜNG CONG TỐT (190)
      • 4.6.1. Những yêu cầu kỹ thuật (190)
      • 4.6.2. Những yêu cầu an toàn (191)
    • 4.7. MỘT SỐ CHƯƠNG TRÌNH MAPLE VỀ ĐƯỜNG CONG ELLIPTIC (192)
      • 4.7.1. Chương trình tính kP (192)
      • 4.7.2. Liệt kê các điểm của đường cong (193)
    • 4.8. CÂU HỎI ÔN TẬP (199)
  • CHƯƠNG 5. GIAO THỨC MẬT MÃ (200)
    • 5.1. ĐỊNH NGHĨA (200)
    • 5.2. CÁC YÊU CẦU TRONG GIAO THỨC XÁC THỰC (202)
      • 5.2.1. Tính tươi của thông báo và tính sống của thực thể (202)
        • 5.2.1.1. Tính tươi của thông báo (202)
        • 5.2.1.2. Tính sống của thực thể (203)
      • 5.2.2. Xác thực nguồn gốc dữ liệu (203)
      • 5.2.3. Xác thực thực thể (204)
      • 5.2.4. Thiết lập khoá có xác thực (206)
    • 5.3. MỘT SỐ GIAO THỨC: THUẬT TOÁN VÀ ĐỘ AN TOÀN (206)
      • 5.3.1. Quy ước chung (206)
      • 5.3.2. Những kỹ thuật xác thực cơ bản (208)
        • 5.3.2.1 Những cơ chế thách đố-giải đố (208)
        • 5.3.2.2. Các cơ chế tem thời gian (209)
        • 5.3.2.3. Những cơ chế phi chuẩn (211)
        • 5.3.2.4. Xác thực lẫn nhau (212)
        • 5.3.2.5. Xác thực liên quan đến bên thứ ba tin cậy (213)
        • 5.3.2.6. Xác thực dựa trên mật khẩu (214)
        • 5.3.2.7. Thêm thành phần phụ gia vào giao thức (217)
        • 5.3.2.8. Trao đổi khoá có xác thực dựa trên mật mã phi đối xứng (219)
      • 5.3.3 Độ an toàn (222)
        • 5.3.3.1. Tấn công diễn lại thông báo (222)
        • 5.3.3.2 Tấn công kẻ đứng giữa (224)
        • 5.3.3.3 Tấn công phiên song song (225)
        • 5.3.3.4 Tấn công phản xạ (226)
        • 5.3.3.9. Tóm tắt và thực hành (232)
    • 5.3 MỘT SỐ CHƯƠNG TRÌNH MAPLE (232)
      • 5.4.1. Cơ chế thách đố-giải đố được chuẩn hóa (233)
      • 5.4.2. Cơ chế tem thời gian được chuẩn hóa (235)
    • 5.5. CÂU HỎI ÔN TẬP (236)
  • CHƯƠNG 6. MỘT SỐ CHUẨN MẬT MÃ (238)
    • 6.1 CHUẨN MÃ DÒNG (238)
      • 6.1.1. Tóm tắt thuật toán gốc SNOW 1.0 (239)
      • 6.1.2. Những điểm yếu trong SNOW 1.0 (240)
      • 6.1.3. Thuật toán SNOW 2.0 (241)
      • 6.1.4. Việc thực hiện SNOW 2.0 (246)
    • 6.2. CHUẨN MÃ KHỐI: AES (248)
      • 6.2.1. Các byte như các đa thức (249)
        • 6.2.1.1. Các biểu diễn của byte (250)
        • 6.2.1.2. Phép cộng 2 byte (250)
        • 6.2.1.3. Phép nhân 2 byte (250)
        • 6.2.1.4. Phép dịch chuyển vòng của từ vào (251)
      • 6.2.2. Mã hoá Rijndael (253)
        • 6.2.2.1. Lời gọi ByteSub(state) (255)
        • 6.2.2.2. Lời gọi ShiftRow(state) (256)
        • 6.2.2.3. Lời gọi MixColumn(state) (257)
        • 6.2.2.4. Lời gọi AddRoundKey(state, RoundKey) (257)
        • 6.2.2.5. Lời gọi KeyExpansion(CipherKey,ExpandedKey) . 246 6.2.2.6. Lời gọi Rcon[i] (Round keys and constants) (258)
      • 6.2.3. Mode giải mã Rijndael (260)
    • 6.3. CHUẨN MẬT MÃ KHÓA CÔNG KHAI VÀ CHỮ KÝ SỐ (261)
      • 6.3.1. Chuẩn mật mã khóa công khai: RSA-OAEP (261)
        • 6.3.2.3. Độ dài muối (salt) (266)
    • 6.4. CHUẨN GIAO THỨC MẬT MÃ (266)
      • 6.4.1. Các vấn đề chung (267)
      • 6.4.2. Lược đồ thỏa thuận khóa số 1 (270)
      • 6.4.3. Lược đồ thỏa thuận khóa số 2 (272)
      • 6.4.4. Lược đồ thỏa thuận khóa số 3 (275)
      • 6.4.5 Lược đồ thỏa thuận khóa số 4 (279)
      • 6.4.6. Lược đồ thỏa thuận khóa số 5 (281)
      • 6.4.7. Lược đồ thỏa thuận khóa số 6 (284)
      • 6.4.8. Lược đồ thỏa thuận khóa số 7 (288)
      • 6.4.9. So sánh tính chất các lược đồ thỏa thuận khóa (291)
    • 6.5 CÂU HỎI ÔN TẬP (292)
  • TÀI LIỆU THAM KHẢO (293)
  • PHỤ LỤC (297)

Nội dung

SƠ LƯỢC VỀ MẬT MÃ HỌC

Lịch sử của mật mã

Mật mã học có một lịch sử dài và thú vị, được ghi chép đầy đủ trong cuốn sách "The Codebreakers" của David Kahn Tác phẩm này theo dấu sự phát triển của mật mã từ thời kỳ Ai Cập cách đây hơn 4000 năm đến thế kỷ XX, khi nó ảnh hưởng lớn đến kết quả của hai cuộc chiến tranh thế giới Hoàn thành vào năm 1963, cuốn sách đề cập đến những khía cạnh lịch sử quan trọng trong sự phát triển của mật mã, chủ yếu phục vụ cho quân đội, ngoại giao và chính phủ Mật mã đã trở thành công cụ bảo vệ chiến lược và bí mật quốc gia.

Sự gia tăng của máy tính và hệ thống thông tin liên lạc trong những năm

Vào những năm 1960, nhu cầu bảo vệ thông tin số và các dịch vụ an toàn thông tin trở nên rất lớn Công việc của Feistel tại IBM vào đầu những năm 1970 đã dẫn đến việc chuẩn hóa mã hóa dữ liệu DES (Data Encryption Standard) vào năm 1977, được công nhận là chuẩn xử lý thông tin cho Liên Bang Mỹ (FIPS) và được sử dụng để mã hóa thông tin không phân loại DES trở thành chuẩn mã hóa nổi tiếng nhất trong lịch sử và vẫn được áp dụng để đảm bảo an toàn thông tin trong thương mại điện tử cho nhiều tổ chức tài chính trên toàn cầu.

Sự phát triển quan trọng nhất trong lịch sử mật mã diễn ra vào năm 1976 khi Diffie và Hellman công bố bài viết “Những hướng mới trong mật mã”, giới thiệu khái niệm mới mẻ trong cộng đồng mật mã Năm 1978, Rivest, Shamir và Adleman phát minh ra hệ mật khóa công khai RSA, dựa trên bài toán phân tích số nguyên lớn thành tích các thừa số nguyên tố Hệ mật RSA đã thúc đẩy nỗ lực nghiên cứu để tìm ra các phương pháp hiệu quả trong phân tích số nguyên Những năm 1980 chứng kiến sự tiến bộ lớn trong mật mã, nhưng không có bằng chứng rõ ràng cho thấy hệ mật RSA không an toàn Năm 1985, ElGamal phát triển một hệ mật mạnh mẽ khác dựa trên tính khó giải của bài toán lôgarit rời rạc Đặc biệt, hệ mật khóa công khai đã cung cấp chữ ký số, với chuẩn quốc tế đầu tiên cho chữ ký số được công nhận vào năm 1991 (ISO/IEC).

Vào năm 1994, Chính phủ Hoa Kỳ đã chính thức chấp nhận chuẩn chữ ký số DSS (Digital Signature Standard), một hệ thống chữ ký số được xây dựng dựa trên thuật toán mã hóa Elgamal.

Việc nghiên cứu và phát triển các hệ mật mới, cải thiện cơ chế mã hóa hiện tại, và chứng minh độ an toàn đang diễn ra nhanh chóng Các tiêu chuẩn và cơ sở hạ tầng liên quan đến mật mã đang được thiết lập, cùng với sự phát triển của các sản phẩm bảo mật nhằm đáp ứng nhu cầu an ninh trong một xã hội thông tin ngày càng phức tạp.

Các mục tiêu của mật mã

Mật mã có mục tiêu đảm bảo các yếu tố quan trọng của an toàn thông tin, bao gồm tính bí mật, tính toàn vẹn, tính xác thực và tính chống chối bỏ.

Tính bí mật (Confidentiality) là yếu tố quan trọng trong dịch vụ này, đảm bảo rằng chỉ những đối tượng được cấp quyền mới có quyền truy cập vào thông tin Bí mật đồng nghĩa với bảo mật và riêng tư, và có nhiều phương pháp để thực hiện điều này, bao gồm chèn, xóa và thay thế dữ liệu.

2 Tính xác thực (Authentication): Xác thực là dịch vụ liên quan đến sự nhận dạng, định danh Chức năng này áp dụng cho cả các thực thể và bản thân thông tin Hai thực thể khi bắt đầu giao tiếp cần xác định danh tính lẫn nhau Thông tin chuyển qua kênh truyền cần được xác thực về nguồn gốc, ngày xuất hiện, nội dung thông tin, thời gian gửi, v.v Vì những lý do này, nó được chia làm 2 loại: xác thực thực thể và xác thực nguồn gốc dữ liệu

3 Tính chống chối bỏ (Non-repudiation): là dịch vụ ngăn không cho một thực thể chối bỏ về những cam kết hay hành động đã thực hiện trước đó của mình Ứng dụng thường gặp nhất của dịch vụ này là chữ ký số Một thực thể sau khi ký lên thông báo, văn bản điện tử, thì anh ta không thể chối bỏ về hành động đó của mình, bởi vì chỉ có anh ta mới có thể tạo ra chữ ký hợp lệ cho các thông báo ấy, với giả thiết rằng các thuật toán mật mã được sử dụng ở đây là đủ mạnh để ngăn không cho các thực thể khác có thể tạo ra chữ ký số giả một cách hợp lệ.

Phân loại các loại mật mã

Dưới đây là mô hình phân loại các thành phần mật mã cơ bản, được sử dụng trong hầu hết các ứng dụng mật mã

Các thành phần bảo mật cơ bản

Các thành phần dùng khóa đối xứng

Các thành phần dùng khóa bất đối xứng

Các hệ mật khóa đối xứng

Các mã xác thực thông báo (MACs)

Các định danh cơ bản

Các hệ mật khóa công khai

Các định danh cơ bản

Hình 1.1 Lược đồ các thành phần mật mã cơ bản

Khi sử dụng các thành phần mật mã trên, ta cần quan tâm tới các tính chất sau:

Độ an toàn của một đối tượng thường khó đánh giá, và được xác định dựa trên số lượng công việc cần thiết để phá vỡ nó Cụ thể, độ an toàn tính toán được tính bằng số phép toán yêu cầu theo phương pháp tốt nhất hiện có để phá vỡ đối tượng đó.

Các thành phần bảo mật cơ bản cần được kết hợp để đáp ứng các mục tiêu an toàn thông tin khác nhau Mỗi thành phần có thể cung cấp chức năng khác nhau tùy thuộc vào chế độ hoạt động và cách sử dụng thực tế.

Hiệu suất là yếu tố quan trọng để đánh giá hiệu quả của một thành phần bảo mật trong một chế độ vận hành cụ thể, chẳng hạn như khả năng của một thuật toán mã hóa trong việc xử lý số bit mã hóa mỗi giây.

• Khả năng cài đặt: liên quan đến những khó khăn khi cài đặt, triển khai trong thực tế, có thể trong phần cứng hoặc phần mềm

Tầm quan trọng của các tiêu chí khác nhau phụ thuộc vào ứng dụng và nguồn tài nguyên sẵn có Trong những môi trường có sức mạnh tính toán hạn chế, có thể cần phải đánh đổi giữa mức độ bảo mật cao và hiệu suất của hệ thống.

CÁC ỨNG DỤNG CỦA MẬT MÃ

Các ứng dụng trong thực tiễn

1.2.1.1 Ứng dụng trong đời sống thông tin, kinh tế, xã hội

Sự bùng nổ của công nghệ thông tin và Internet trong những năm gần đây đã thúc đẩy việc sử dụng hệ thống máy tính trong mọi lĩnh vực, từ tổ chức đến cá nhân Các hoạt động thông tin, kinh tế và xã hội ngày càng được triển khai rộng rãi qua mạng Internet, dẫn đến sự hình thành của nền kinh tế thương mại điện tử, nơi mà mọi giao dịch mua bán và dịch vụ đều dựa trên nền tảng trực tuyến.

Hệ thống World Wide Web trước đây sử dụng giao thức HTTP để truyền nhận thông tin, nhưng không đảm bảo tính bí mật cho dữ liệu Hiện nay, giao thức HTTPS đã thay thế HTTP, không chỉ đảm bảo việc truyền nhận thông tin mà còn bảo vệ nội dung dữ liệu, giữ cho thông tin được an toàn và riêng tư trong quá trình truyền tải.

Trước đây, các ngân hàng lưu trữ thông tin thẻ tín dụng dưới dạng clear-text, bao gồm tên chủ thẻ, số tài khoản, mã PIN và ngày hết hạn, điều này tạo ra nguy cơ lộ thông tin khi kẻ tấn công có thể truy cập vào cơ sở dữ liệu Hiện nay, mối lo ngại này đã được giải quyết nhờ vào việc sử dụng hàm băm, giúp thông tin bí mật không còn được lưu trữ trực tiếp Thay vào đó, thông tin sẽ được thay thế bằng giá trị băm, làm cho việc xác định thông tin bí mật trước khi băm trở nên rất khó khăn đối với kẻ tấn công.

Trước đây, các hoạt động xã hội như nộp thuế và kê khai thuế yêu cầu văn bản có giá trị pháp lý cao với chữ ký hoặc dấu vân tay của người nộp Hiện nay, hình thức này đã được thay thế bằng chữ ký số, một phương pháp an toàn và hiệu quả Chữ ký số cho thấy tính an toàn cao về mặt tính toán, với thời gian tạo ra chữ ký số giả hợp lệ rất lớn đối với các kẻ tấn công có năng lực tính toán hạn chế Cụ thể, để phá mã RSA với độ dài khóa 1024 bít, độ phức tạp tính toán lên tới 3.10^11 MIPS năm, trong khi RSA 2048 bít là 3.10^20 MIPS năm, và với ECC 234 bít, độ phức tạp là 1.6.10^28 MIPS năm.

1.2.1.2 Ứng dụng trong an ninh, quốc phòng

Mật mã, từ khi ra đời, chủ yếu phục vụ cho quân đội, ngoại giao và chính phủ, đã trở thành công cụ quan trọng trong việc bảo vệ chiến lược và bí mật quốc gia.

Trong thời kỳ trước và trong chiến tranh Thế giới lần thứ II, Quân đội Đức đã mã hóa hầu hết các chỉ thị và mệnh lệnh để bảo vệ bí mật quân sự, với máy mã Enigma có cơ chế mã hóa phức tạp nhất lịch sử Mặc dù người Đức tin rằng Enigma là bất khả xâm phạm, các nhà toán học Ba Lan từ năm 1933 đã giải được toàn bộ điện mật của Đức Nhờ sự hỗ trợ của Ba Lan, Anh và Pháp cũng đã đọc được các bức điện mật này Nhiều nhà sử học cho rằng công trình giải mã Enigma đã giúp Thế chiến thứ II ngắn lại đến hai năm.

Sau chiến tranh thế giới thứ II, công nghệ mật mã được các quốc gia quân sự đầu tư nghiên cứu mạnh mẽ Một trong những cơ quan hàng đầu trong lĩnh vực này là Cơ quan An ninh Quốc gia Hoa Kỳ (NSA), nổi bật với vai trò trong việc phát triển Chuẩn mã hóa dữ liệu (DES), một chuẩn mã khối quan trọng cho chính phủ Sự tham gia của NSA vào quá trình thiết kế DES tại IBM vào thập kỷ 1970 đã gây ra nhiều tranh cãi và thảo luận trong cộng đồng công nghệ mật mã.

Vào năm 1970, NSA đã đề xuất thay đổi thuật toán mã hóa, dẫn đến nghi ngờ rằng họ đã cố tình làm yếu thuật toán để có thể phá vỡ khi cần thiết Nghi ngờ chủ yếu tập trung vào S-box, một thành phần quan trọng có thể trở thành cổng sau cho NSA Độ dài khóa cũng bị rút ngắn từ 128 xuống 56 bít, tạo điều kiện cho NSA sử dụng siêu máy tính của mình để giải mã Tuy nhiên, khi kỹ thuật phân tích mã lượng sai được phát hiện, những nghi ngờ này giảm bớt, vì S-box đã được sửa đổi để chống lại kiểu tấn công này Điều này cho thấy NSA có thể đã biết đến phân tích mã lượng sai từ khi thiết kế DES Việc can thiệp để giảm độ dài khóa chỉ có thể được hiểu là một nỗ lực nhằm làm yếu thuật toán, giúp NSA có khả năng tấn công hiệu quả hơn khi cần thiết.

NSA đóng vai trò quan trọng trong các tranh cãi về xuất khẩu công nghệ mật mã vào cuối thập kỷ 1990 Từ trước đến nay, phần cứng và phần mềm mã hóa được coi là hàng hóa nhạy cảm, ngang hàng với máy bay chiến đấu, xe tăng, pháo và bom nguyên tử.

Tại nhiều thời điểm, NSA/CSS đã cố gắng hạn chế việc xuất bản các tài liệu nghiên cứu về mật mã học.

Ứng dụng của một số thành phần mật mã cơ bản

1.2.2.1 Dãy ngẫu nhiên, dãy giả ngẫu nhiên

Các dãy ngẫu nhiên và dãy giả ngẫu nhiên đóng vai trò quan trọng trong mật mã, được sử dụng làm khóa cho cả hệ mật khóa đối xứng và bất đối xứng Chúng không chỉ là khóa mà còn giúp “ngẫu nhiên hóa” các đại lượng đi kèm, làm cho việc dự đoán các đại lượng này trở nên khó khăn hơn, như trong trường hợp vectơ khởi tạo của hệ mật DES, AES, hoặc số ngẫu nhiên k trong hệ mật Elgamal, ECC và thuật toán ký số DSA.

Các dãy số ngẫu nhiên được tạo ra từ bộ sinh số ngẫu nhiên TRNGs (True Random Number Generators) khác với các dãy số giả ngẫu nhiên được sản xuất từ bộ sinh số giả ngẫu nhiên PRNGs (Pseudo-Random Number Generators) Trong khi TRNGs sử dụng phương pháp vật lý để tạo ra số, PRNGs dựa vào các thuật toán tính toán để sản xuất số giả ngẫu nhiên.

Hình 1.2 Tập tin thiết bị sinh số ngẫu nhiên trên Linux

Các phương pháp vật lý để tạo số thật sự ngẫu nhiên bao gồm việc sử dụng các hiện tượng như tung đồng xu, xúc xắc, và quay bóng trong lồng chứa Mặc dù vẫn được sử dụng trong các trò chơi may mắn như xổ số, phương pháp này quá chậm cho ứng dụng thống kê và mật mã Thay vào đó, các nguồn vật lý khác như hiện tượng nguyên tử và các định luật cơ học lượng tử được áp dụng để tạo ra số ngẫu nhiên hiệu quả hơn Các nguồn entropy có thể bao gồm phân rã phóng xạ, nhiễu nhiệt, và hiệu ứng thác đổ trong điốt Zener Mặc dù các bộ sinh số ngẫu nhiên này có độ an toàn cao, nhưng tốc độ sinh của chúng thường chậm, do đó chúng thường được sử dụng làm khóa cho các ứng dụng yêu cầu độ an toàn cao hoặc làm “mầm sinh” cho các bộ sinh số giả ngẫu nhiên an toàn về mật mã.

Bộ sinh số giả ngẫu nhiên được chia thành hai loại: loại không có đầy đủ tính chất thống kê của dãy ngẫu nhiên thực sự và loại có đầy đủ tính chất này Loại đầu tiên dễ tạo và nhanh chóng, phù hợp cho các ứng dụng không yêu cầu tính bảo mật cao như mô phỏng trong trò chơi Trong khi đó, loại thứ hai, gọi là bộ sinh số giả ngẫu nhiên an toàn về mật mã (CSPRNG), yêu cầu một “mầm sinh” đảm bảo tính chất thống kê của dãy ngẫu nhiên thực sự và đủ lớn để không bị dự đoán Mầm sinh này có thể lấy từ các bộ sinh số ngẫu nhiên thực sự hoặc từ những dãy giả ngẫu nhiên an toàn khác, như kết quả của hàm băm an toàn Một số bộ sinh số giả ngẫu nhiên an toàn về mật mã phổ biến bao gồm bộ sinh BBS (Blum-Blum-Shub), bộ sinh RSA, và bộ sinh dựa trên các hàm băm an toàn.

Hàm băm mật mã là một thành phần thiết yếu trong mật mã hiện đại, đóng vai trò quan trọng trong việc đảm bảo toàn vẹn dữ liệu và xác thực thông báo Mặc dù liên quan đến hàm băm thông thường trong các ứng dụng máy tính phi mật mã, hàm băm mật mã khác biệt ở một số khía cạnh quan trọng Nó được sử dụng để tạo ra chữ ký số, giúp xác thực người gửi và duy trì tính toàn vẹn của dữ liệu.

Hình 1.3 Sử dụng hàm băm bằng HashTab để kiểm tra tính toàn vẹn của tập tin trong Windows Định nghĩa tổng quát về hàm băm mật mã:

Một hàm băm mật mã là một hàm h mà có các tính chất sau:

1 Nén – hàm h ánh xạ một đầu vào x có độ dài bit tùy ý thành một đầu ra h(x) có độ dài bit cố định n

2 Dễ tính toán – cho trước h và một đầu vào x, h(x) là dễ tính toán

3 Kháng tiền ảnh – với cơ bản tất cả các đầu ra xác định trước, ta không thể tính toán để tìm đầu vào bất kỳ mà băm thành đầu ra đó, cụ thể, tìm một tiền ảnh bất kỳ xsao cho h(x) = y khi cho trước y bất kỳ là kết quả băm tương ứng của đầu vào không biết

4 Kháng tiền ảnh thứ hai – ta không thể tính toán để tìm một đầu vào thứ hai bất kỳ mà có cùng đầu ra như với đầu vào xác định bất kỳ, cụ thể, cho trước x, tìm nghịch ảnh thứ hai x x sao cho h(x) = h(x)

5 Kháng va chạm – ta không thể tính toán được hai đầu vào phân biệt x, x mà băm thành cùng đầu ra, cụ thể, sao cho h(x) = h(x) (Chú ý rằng ở đây được tự do chọn cả hai đầu vào.) Với công nghệ tính toán hiện nay, có rất nhiều các hàm băm đã không còn an toàn như MD2, MD4, MD5, RIPEMD-128, SHA-0, SHA-1, GOST, Trong số các hàm băm được dùng phổ biến trong những năm vừa qua, thì các hàm băm thuộc lớp SHA-2 (gồm có SHA-256, SHA-224, SHA-384, SHA-512), RIPEM-

160, fhWhirlpool vẫn được coi là an toàn

Mã dòng được ứng dụng trong một số các hệ mật như: OTP, RC4

Hệ mật OTP (One Time Pad) là một phương pháp mã hóa sử dụng khóa ngẫu nhiên chỉ một lần, với độ dài của khóa tương đương với độ dài của bản mã Quy trình mã hóa được thực hiện bằng cách thực hiện phép XOR giữa khóa và bản rõ, trong khi để giải mã, ta cũng sử dụng phép XOR giữa bản mã và khóa.

Hệ mật một lần (OTP) có ưu điểm nổi bật là tốc độ mã hóa nhanh và đảm bảo “độ an toàn vô điều kiện”, nghĩa là ngay cả khi đối phương có khả năng tính toán mạnh mẽ, họ cũng không thể tìm ra phương pháp hiệu quả hơn ngoài việc thử toàn bộ không gian khóa Tuy nhiên, việc áp dụng OTP trong thực tế gặp nhiều khó khăn Đầu tiên, mỗi lần mã hóa yêu cầu một khóa ngẫu nhiên khác, dẫn đến số lượng khóa cần quản lý tương đương với số lượng bản rõ cần mã hóa Thứ hai, chiều dài khóa phải bằng chiều dài bản rõ, khiến tổng dung lượng các khóa cần quản lý tăng lên đáng kể Cuối cùng, việc tạo ra các chuỗi ngẫu nhiên thực sự chỉ có thể thực hiện thông qua các phương pháp vật lý, mà tốc độ của chúng thường chậm hơn so với các phương pháp tính toán Để khắc phục những hạn chế này, mã dòng đã được đề xuất như một giải pháp thay thế.

Dãy giả ngẫu nhiên được tạo ra dưới sự kiểm soát của một khóa bí mật, yêu cầu khóa này phải có kích thước lớn và được sinh ra một cách ngẫu nhiên thực sự Quá trình này sử dụng một thuật toán xác định, được gọi là bộ tạo khóa dòng.

• Sử dụng dòng khóa bên trên để XOR với bản mã

Trong một hệ mã dòng đồng bộ, nếu bên thứ ba biết nội dung mã hóa, họ cũng có thể nắm bắt nội dung của dòng khóa Để đảm bảo an toàn cho hệ thống, cần phải đảm bảo rằng không ai có thể dự đoán vị trí của dòng khóa với xác suất cao hơn so với việc dự đoán một dãy ngẫu nhiên thực sự, bất kể số lượng ký tự khóa đã được quan sát.

RC4 được thiết kế bởi Ron Rivest của hãng bảo mật RSA Security vào năm

RC4, ra đời vào năm 1987, là mã dòng phổ biến nhất, được ứng dụng rộng rãi trong các giao thức như SSL, TLS để bảo vệ lưu lượng Internet và WEP, WPA nhằm đảm bảo an toàn cho mạng không dây.

RC4 hỗ trợ kích thước khóa từ 40 đến 2048 bit Từ khóa này, một dòng khóa được tạo ra để thực hiện phép XOR với bản rõ Để tạo ra dòng khóa, hệ mật sử dụng một trạng thái bí mật gồm hai thành phần.

• Một hoán vị của tất cả 256 bytes có thể (ký hiệu S)

• Hai con trỏ chỉ số 8 bít (ký hiệu i, j)

Hoán vị được tạo ra bằng cách sử dụng một khóa có độ dài thay đổi, thường từ 40 đến 256 bít, thông qua thuật toán lập lịch khóa (KSA) Sau khi hoàn tất bước này, dòng bít sẽ được sinh ra bằng thuật toán sinh số giả ngẫu nhiên (PRGA).

Ứng dụng trong các giao thức bảo mật

Mật mã đóng vai trò quan trọng trong nhiều giao thức và ứng dụng bảo mật hiện nay Một số ứng dụng phổ biến sử dụng mật mã bao gồm mã hóa mật khẩu và xác thực đăng nhập trên hệ điều hành Linux, cũng như các giao thức như SSH, SSL, SET, PGP và GnuPG.

1.2.3.1 Xác thực đăng nhập trên Linux

Hình 1.4 Mật khẩu đăng nhập được mã hóa trên Linux Mint 15

Mật khẩu đăng nhập trên Linux Mint 15 được lưu trữ trong file /etc/shadow và được băm bằng hàm SHA512, với giá trị ngẫu nhiên dài 128 bít Quá trình băm sử dụng thư viện Glibc 2.17, trong đó mặc định số lần băm là 5000 lần Trước khi có PAM (Pluggable Authentication Module), các chương trình như login, su, passwd chỉ tìm kiếm thông tin xác thực trong file /etc/passwd, gây ra nhiều vấn đề cho quản trị viên hệ thống Việc áp dụng hàm băm MD5 và kỹ thuật che giấu mật khẩu thông qua /etc/shadow đã tạo ra sự phức tạp trong việc xử lý các phương pháp xác thực khác nhau PAM giải quyết vấn đề này bằng cách làm cho quá trình xác thực trở nên trong suốt, bất kể cách lưu trữ thông tin xác thực của người dùng.

PAM, được phát triển bởi Sun MicroSystems vào năm 1995, là một giải pháp cho phép các chương trình không trực tiếp truy cập và xử lý tập tin mật khẩu Thay vào đó, các chương trình chỉ cần yêu cầu PAM, và PAM sẽ đảm nhận toàn bộ công việc xác thực, sau đó trả lại kết quả cho chương trình.

Tính đến tháng 6 năm 2013, phiên bản mới nhất của PAM là Linux-PAM-1.1.6, hỗ trợ nhiều giao thức và thuật toán đa dạng Các giao thức và dịch vụ được hỗ trợ bao gồm local login, SSH, Radius, TCACS+, Kerberos, POP3, IMAP, SQL, SAMBA, và LDAP Ngoài ra, PAM cũng hỗ trợ các thuật toán mã hóa như DES, IDEA, Blowfish, AES, MD5, SHA1, SHA256, và SHA512.

SSH là giao thức bảo mật cho phép người dùng truy cập từ xa thông qua giao diện Shell điều khiển Nó mã hóa toàn bộ thông tin truyền tải giữa máy chủ (SSH Server) và máy khách (SSH Client), giúp ngăn chặn các cuộc tấn công nghe lén Đối với Linux Mint 15, người dùng có thể cài đặt SSH Server bằng gói “openssh-server 1:6.1p1-4”, trong khi trên Windows, Putty có thể được sử dụng như một SSH Client để kết nối, với giao thức SSH phiên bản 2 được sử dụng mặc định.

Phiên bản openssh-server trên hỗ trợ các thuật toán, hệ mật sau:

Hệ mật khóa đối xứng

DES (chỉ được hỗ trợ trong SSH-1), 3DES (mặc định của SSH-

2), AES128-CTR, AES192-CTR, AES256-CTR, RC4-256, RC4-128, AES128-CBC, 3DES-CBC, BLOWFISH-CBC, CAST128-CBC, AES192-CBC, AES256-CBC, RC4 Thuật toán trao đổi khóa

ECDH-SHA2-NISTP256, ECDH-SHA2-NISTP384, ECDH- SHA2-NISTP521, DIFFIE-HELLMAN-GROUP-EXCHANGE- SHA256, DIFFIE-HELLMAN-GROUP-EXCHANGE-SHA1, DIFFIE-HELLMAN-GROUP14-SHA1, DIFFIE-HELLMAN- GROUP1-SHA1

Mã xác thực thông báo

HMAC-MD5, HMAC-SHA1, UMAC-64@OPENSSH.COM, HMAC-SHA2-256, HMAC-SHA2-512, HMAC-RIPEMD160, HMAC-SHA1-96, HMAC-MD5-96

The article discusses various cryptographic algorithms used in OpenSSH, including ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-rsa, and ssh-dss It highlights the different certificate versions such as ecdsa-sha2-nistp256-cert-v01, ecdsa-sha2-nistp384-cert-v01, ecdsa-sha2-nistp521-cert-v01, ssh-rsa-cert-v01, ssh-dss-cert-v01, ssh-rsa-cert-v00, and ssh-dss-cert-v00 These algorithms and their respective certificates play a crucial role in ensuring secure communication in SSH protocols.

Quá trình hoạt động của SSH thông qua 3 bước:

• Bước 1: Định danh host - xác định định danh của hệ thống tham gia phiên làm việc SSH

• Bước 2: Mã hoá - thiết lập kênh làm việc mã hoá

• Bước 3: Chứng thực - xác thực người sử dụng có quyền đăng nhập hệ thống

Khi máy client gửi yêu cầu kết nối, máy chủ xác định định danh của máy client qua địa chỉ IP Sau đó, máy chủ SSH tạo ngẫu nhiên một cặp khóa bí mật gồm khóa công khai (mặc định là RSA 2048 bít) và gửi khóa công khai này cho máy client Mỗi máy client với địa chỉ IP khác nhau sẽ nhận được khóa công khai riêng biệt.

Hình 1.5 Máy chủ SSH gửi khóa công khai cho máy client

Máy chủ SSH tự động sinh ra khóa công khai và gửi cho client, nhưng khóa này không được chứng nhận bởi bất kỳ tổ chức nào Do đó, client phải tự đánh giá độ tin cậy của khóa công khai nhận được; nếu tin tưởng, họ sẽ chấp nhận và thiết lập kết nối, ngược lại sẽ hủy bỏ kết nối Việc sử dụng khóa công khai không có chữ ký từ bên thứ ba đáng tin cậy khiến SSH dễ bị tấn công kiểu “Người xen giữa” (Man-in-the-Middle).

In the Midle) Tuy nhiên việc triển khai tấn công này với SSH ở môi trường thực tế là tương đối khó khăn

Bước 2: Mã hoá - thiết lập kênh làm việc mã hoá

Trong bước này, hai máy sẽ thiết lập hệ mật khóa đối xứng để giao tiếp với nhau Theo mặc định, máy chủ SSH sử dụng thuật toán 3DES để mã hóa và giải mã dữ liệu.

Hệ mật khóa bất đối xứng có tốc độ chậm hơn nhiều so với hệ mật khóa đối xứng, và với cùng kích cỡ khóa, hệ mật đối xứng an toàn hơn Do đó, hệ mật bất đối xứng thường được sử dụng để trao đổi khóa cho hệ mật đối xứng.

Máy client sử dụng thuật toán đối xứng để kết nối với máy chủ SSH Đầu tiên, máy client tạo ra một chuỗi ngẫu nhiên làm khóa đối xứng Sau đó, nó mã hóa chuỗi này bằng khóa công khai RSA 2048 bít mà nó nhận được và gửi đến máy chủ Máy chủ sẽ giải mã chuỗi ngẫu nhiên đó bằng khóa bí mật của mình.

Có nhiều phương pháp để thỏa thuận khóa dùng chung, trong đó nổi bật là các thuật toán trao đổi khóa như Diffie-Hellman, dựa trên độ khó của bài toán lôgarít rời rạc trên số nguyên, và ECDH, dựa trên độ khó của bài toán lôgarít rời rạc trên nhóm các điểm trên đường cong Elliptic.

Bước 3: Chứng thực - xác thực người sử dụng có quyền đăng nhập hệ thống hay không

Sau bước 2, tất cả thông tin trao đổi giữa máy chủ và máy trạm được mã hóa bằng hệ mật khóa đối xứng Máy trạm gửi tên truy cập và mật khẩu tới máy chủ, nơi máy chủ SSH sẽ giải mã thông tin này và sử dụng mô-đun PAM trên hệ thống để xác thực.

Giao thức SSL (Secure Socket Layer) được phát triển bởi Netscape nhằm cung cấp truyền thông bảo mật, độc lập với các giao thức lớp trên như HTTP SSL sử dụng hệ mật RSA và chứng chỉ số X.509 để xác thực máy chủ trong quá trình khởi tạo kết nối, với tùy chọn xác thực máy trạm Trong phiên bản SSL v2.0 (1995), giao thức hỗ trợ RC2 và RC4 với 40 bít khóa, trong khi SSL v3.0 (1996) bổ sung hỗ trợ cho DES, RC4 với 128 bít khóa, và 3DES với 168 bít khóa, sử dụng các hàm băm MD5 hoặc SHA-1 Giao thức này được mô tả chi tiết trong RFC6101.

Hình 1.6 Trang web hỗ trợ HTTPS

Vào năm 1997, các điểm yếu của SSL v3 đã được phát hiện, dẫn đến việc IETF phát triển một giao thức mới không độc quyền mang tên Transport Layer Security (TLS), được mô tả trong RFC2246 vào năm 1999 TLS, được phát triển từ SSL, hỗ trợ thêm nhiều hệ mật, bao gồm thuật toán trao đổi khóa Diffie-Hellman và chữ ký số DSS, với lược đồ khóa chia sẻ dùng chung được mô tả trong RFC4279 TLS tương thích ngược với SSL và được xem như là SSL 3.1 Hiện nay, cả SSL v3.0 và TLS v1.0 đều được hỗ trợ bởi hầu hết các máy chủ và trình duyệt, trong khi SSL 2.0 rất hiếm khi được sử dụng, và các máy chủ hỗ trợ TLS sẽ không bao giờ đàm phán sử dụng SSL v2.0.

Microsoft CryptoAPI

• Ngôn ngữ hỗ trợ: C, C++, C#, Visual Basic

• Bản quyền: Windows, miễn phí sử dụng

Giao diện lập trình ứng dụng mật mã (CryptoAPI), hay còn gọi là Microsoft Cryptography API, MS-CAPI, hoặc đơn giản là CAPI, là một công cụ đi kèm với hệ điều hành Windows của Microsoft Nó cung cấp dịch vụ cho phép các nhà phát triển bảo mật ứng dụng trên Windows thông qua việc sử dụng mật mã CryptoAPI lần đầu được giới thiệu trong Windows NT 4.0 và đã được nâng cấp trong các phiên bản sau.

CryptoAPI tương tác với các nhà cung cấp dịch vụ mật mã (CSP) được cài đặt trên hệ thống Các CSP thực hiện các chức năng mã hóa và giải mã thông qua việc áp dụng các hàm mật mã Ngoài ra, các nhà cung cấp module khóa cứng (HSM) cũng hỗ trợ hoạt động của CSP trên phần cứng của họ.

CryptoAPI gồm 5 vùng chức năng chính:

✓ Các hàm mật mã cơ bản

✓ Các hàm mã hóa, giải mã chứng chỉ số

✓ Các hàm lưu trữ chứng chỉ

✓ Các hàm đơn giản hóa thông điệp

✓ Các hàm thông điệp mức thấp

Phiên bản nâng cấp của CryptoAPI, được gọi là “Cryptography API: Next Generation (CNG)”, đã được giới thiệu để thay thế CryptoAPI và được hỗ trợ từ Windows Server 2008 và Windows Vista CNG được thiết kế với khả năng mở rộng cao, cho phép các nhà phát triển ứng dụng tạo và chia sẻ tài liệu trong môi trường an toàn, đặc biệt trên Internet Để sử dụng CNG hiệu quả, các nhà phát triển nên có kiến thức về ngôn ngữ lập trình C và C++, cũng như môi trường lập trình Windows Mặc dù không bắt buộc, nhưng việc hiểu biết về mật mã và các khía cạnh liên quan đến an ninh là rất quan trọng.

JCA, JCE

• Ngôn ngữ hỗ trợ: Java

• Bản quyền: Oracle, miễn phí sử dụng

JCA (Java Cryptography Architecture) được đóng gói trong lớp java.security.*, trong khi JCE (Java Cryptography Extension) nằm trong lớp java.crypto.* Sự phân chia này xuất phát từ luật cấm xuất khẩu công nghệ mã hóa của chính phủ Mỹ trước JDK 1.4, khiến JCE không được tích hợp trong sản phẩm mà chỉ được phân phối riêng cho Mỹ và Canada JCE bao gồm một số mở rộng của JCA, với các engine như Cipher, KeyGenerator, SecretKeyFactory, KeyAgreement và Mac.

Hiện nay, JCE đã được tích hợp cùng với JDK, làm cho sự khác biệt giữa JCA và JCE trở nên mờ nhạt JCE sử dụng kiến trúc của JCA, do đó, JCE nên được coi là một phần của JCA JCA trong JDK bao gồm hai thành phần phần mềm.

The framework defines and supports the encryption services provided by vendors for implementation It includes packages such as java.security, javax.crypto, javax.crypto.spec, and javax.crypto.interfaces.

• Các nhà cung cấp dịch vụ mật mã thực tế như Sun, SunRsaSign, SunJCE, có chứa các cài đặt mật mã thực tế

Bất cứ khi nào một nhà cung cấp JCA cụ thể được đề cập, nó sẽ được giới thiệu một cách rõ ràng theo tên của nhà cung cấp

Tính đến tháng 6 năm 2013, phiên bản JDK mới nhất là JDK 7, bao gồm cả JCA và JCE, trong đó JCA chứa đầy đủ các engine của JCE.

MỘT SỐ PHẦN MỀM HỖ TRỢ NGHIÊN CỨU MẬT MÃ

Maple

Maple là một phần mềm toán học thương mại đa năng, được phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình thức tại Đại học Waterloo, Ontario, Canada Phần mềm này phục vụ nhiều mục đích khác nhau trong lĩnh vực toán học.

Từ năm 1988, Maple đã được phát triển và thương mại hóa bởi công ty Waterloo Maple Inc, hay còn gọi là Maplesoft, có trụ sở tại Waterloo, Ontario, Canada Đối thủ chính của Maple là Mathematica Kể từ khi ra mắt, Maple đã cho ra mắt nhiều phiên bản khác nhau, với những cải tiến liên tục.

2013, phiên bản mới nhất là Maple 17

Người dùng có thể nhập biểu thức toán học bằng các ký hiệu truyền thống và dễ dàng tạo giao diện người dùng tùy chỉnh Maple hỗ trợ cả tính toán số và tính toán hình thức, cùng với khả năng hiển thị Nhiều phép tính số học được thực hiện thông qua thư viện số học NAG, với các chương trình con NAG trong Maple được mở rộng để cho phép độ chính xác ngẫu nhiên cao Các ví dụ về tính toán hình thức sẽ được trình bày trong phần tiếp theo.

Maple là một ngôn ngữ lập trình cấp cao đầy đủ, cung cấp giao diện cho nhiều ngôn ngữ khác như C, Fortran, Java, MatLab và Visual Basic Ngoài ra, Maple còn có giao diện tích hợp với Excel, giúp người dùng dễ dàng thực hiện các phép toán và phân tích dữ liệu.

Chức năng toán học chủ yếu của Maple được lập trình bằng ngôn ngữ Maple và được thông dịch bởi nhân Maple, vốn được phát triển bằng ngôn ngữ C Maple có khả năng hoạt động trên tất cả các hệ điều hành chính.

Ngôn ngữ lập trình Maple là một ngôn ngữ kiểu động, cho phép lưu trữ các biểu thức hình thức theo đồ thị không chu trình có hướng (DAG) như các hệ thống đại số máy tính Maple hỗ trợ phạm vi biến nhất định (lexical scoping) và có hình thức lập trình hàm, đồng thời cung cấp đầy đủ tính năng cho lập trình truyền thống theo kiểu mệnh lệnh Đặc biệt, mặc dù là một chương trình thương mại, hầu hết mã nguồn của Maple đều có thể được xem tự do.

Tạo chương trình tương tác

Maple hỗ trợ tạo 2 kiểu tương tác với người dùng:

1 Tương tác qua màn hình nhập lệnh (Worksheet) của Maple: các dữ liệu đầu vào được nhập trực tiếp trên màn hình nhập lệnh, sau đó được Maple thực thi và đưa kết quả trực tiếp ngay sau câu lệnh (hoặc đoạn chương trình) vừa thực hiện Chế độ này thích hợp khi ta chỉ cần quan tâm tới thuật toán của chương trình

2 Tương tác qua giao diện đồ họa: sau khi kiểm tra chương trình với chế độ trên, ta có thể xây dựng một giao diện đồ họa để thuận tiện cho quá trình tương tác Người dùng có thể nhập dữ liệu trực tiếp trên giao diện đồ họa Giao diện đồ họa được tạo bằng cách sử dụng các thành phần “Maplets” của Maple.

Mathematica

Mathematica là phần mềm tính toán mạnh mẽ, được ứng dụng rộng rãi trong các lĩnh vực khoa học, kỹ thuật, toán học và công nghệ thông tin Phần mềm này được thiết kế và phát triển bởi Stephen Wolfram tại Wolfram Research, có trụ sở tại Champaign, Illinois.

Mathematica bao gồm hai phần chính: phần lõi và phần giao diện đầu-cuối Phần lõi chịu trách nhiệm diễn giải mã Mathematica và trả về kết quả, trong khi phần giao diện đầu-cuối, do Theodore Gray thiết kế, cung cấp một giao diện đồ họa cho phép người dùng tạo và chỉnh sửa tài liệu chứa mã chương trình, văn bản định dạng, cùng với các kết quả như ký tự toán học, đồ họa, thành phần giao diện đồ họa, bảng biểu và âm thanh Tất cả nội dung và định dạng có thể được tạo ra thông qua thuật toán hoặc chỉnh sửa tương tác Giao diện hỗ trợ nhiều tính năng xử lý văn bản tiêu chuẩn, nhưng chỉ có một mức "undo" và bộ kiểm tra chính tả không được kích hoạt tự động Ngoài ra, giao diện đầu-cuối còn tích hợp các công cụ phát triển như trình sửa lỗi, tự động hoàn thành câu lệnh và tô màu cú pháp tự động.

Wolfram Workbench là một giao diện phát triển dựa trên Eclipse, được giới thiệu vào năm 2006, cung cấp các công cụ phát triển cho Mathematica, bao gồm quản lý sửa đổi, gỡ lỗi, gia công và kiểm tra Hạt nhân của Mathematica cũng có một giao diện dòng lệnh đầu cuối Tính đến tháng 6 năm 2013, phiên bản mới nhất của Mathematica là Mathematica 9.

Ngoài Maple, Mathematica, còn có một số phần mềm toán học khác hỗ trợ người dùng nghiên cứu mật mã, chẳng hạn như: Matlab, Genius.

CÂU HỎI ÔN TẬP

1 Nêu sơ lược về lịch sử của mật mã học?

2 Các mục tiêu cơ bản của mật mã là gì?

3 Nêu một số ứng dụng của mật mã trong đời sống kinh tế, xã hội và an ninh quốc phòng

4 Nêu một số ứng dụng của mã dòng và mã khối

5 Nêu một số ứng dụng của mật mã khóa công khai, chữ ký số và hàm băm

6 Trình bày một số giao thức bảo mật ứng dụng mật mã như: SSL, SSH, PGP, S/MINE,…

7 Trình bày một số Framework hỗ trợ lập trình ứng dụng mật mã.

MẬT MÃ DÒNG

KHÁI NIỆM MÃ DÒNG

Ý tưởng cơ bản của mã dòng là sinh dòng khóa z1,z2,…, zn theo một thuật toán nào đó và mã một dòng các đặc trưng rõ theo cách

Việc sinh dòng khóa được thực hiện như sau:

Giả sử K là một khóa với l bít, các hàm fi được sử dụng để tạo ra dãy khóa zi theo công thức: z1 = f1(K); zi = fi(K,x1,…,xi-1,yi-h,…,yi) với i = 2,3,… Quá trình mã hóa diễn ra theo cách này.

- Tính z2 rồi tính y2 = e z 2 ( ) x 2 (Chú ý: khi chưa có đủ y nêu trong công thức (2.2) thì y chưa có mặt ở đó)

- Cứ như vậy cho đến hết các bít rõ

Quá trình giải mã cần tính liên tiếp z1, x1=d z 1 ( ) x 1 , z2 , x2 ==d z 2 ( ) x 2 ,…

Mã dòng được gọi là đồng bộ nếu zi = fi(K), với mọi i=1,2,… vì nó yêu cầu sự đồng bộ giữa người gửi và người nhận

Mã dòng được gọi là tự đồng bộ nếu zi = fi(K, yi-h,…,yi), với mọi i h+1,h+2,…

Một số mật mã dòng như Helix và Phelix không đồng bộ và không tự đồng bộ, do trạng thái của chúng bị ảnh hưởng bởi tất cả các bít thông báo trước đó.

Mã dòng là tuần hoàn với chu kỳ d nếu zi+d = zi với mọi i h

Thông thường (và phổ biến nhất) là dùng loại mã dòng có quy tắc mã hóa và giả mã như sau: ez(x)=x+z mod 2; dz(y)=y+z mod 2

Một thành phần quan trọng của mã dòng là bộ tạo khóa, với nhiều loại khác nhau Nội dung này thu hút sự quan tâm nghiên cứu từ nhiều nhà khoa học.

Vấn đề bảo mật của mã dòng phụ thuộc vào chất lượng của dòng khóa z1, z2,…, zn Để đánh giá khả năng bảo mật của các dòng khóa này, chúng ta cần tìm hiểu về hệ mật Vernam, hay còn gọi là hệ mật khóa ngẫu nhiên dùng một lần (OTP).

Giả sử m1, m2,…, mn là dãy nhị phân biểu diễn bản rõ, trong khi 1, 2,… là dãy các biến ngẫu nhiên độc lập nhận giá trị 0 và 1 với xác suất 1/2 Dãy z1, z2,…, zn biểu diễn khóa là các thể hiện độc lập tương ứng của các biến này.

Hệ mật khóa ngẫu nhiên dùng một lần (hệ Vernam) hoạt động như sau:

Mã hóa: ci = mi zi, i=1,2,…,n

Giải mã: mi = ci zi, i=1,2,…,n

Hệ mật khóa ngẫu nhiên dùng một lần được chứng minh đạt bí mật hoàn thiện, nghĩa là P(x/y) = P(x) cho mọi bản rõ x và bản mã y Hệ mật này lý tưởng vì đối phương không thể tìm ra nghiệm duy nhất cho bản rõ, bất kể số lượng bản mã thu được Đây là hệ mật an toàn vô điều kiện duy nhất được công nhận cho đến nay.

Hệ mật ngẫu nhiên sử dụng khóa một lần mang lại độ bảo mật cao nhất với tính an toàn vô điều kiện Tuy nhiên, phương pháp này cũng tồn tại một số nhược điểm cần lưu ý.

Trước khi phát hành mã thông báo, cần phải tạo và phân phối khóa Độ dài của khóa tương đương với độ dài của bản rõ, dẫn đến việc quản lý khối lượng khóa trở nên rất lớn Khối lượng này càng tăng lên khi số lượng người sử dụng mạng nhiều và khối lượng mã hóa gia tăng.

Hệ mật mã dòng chỉ được sử dụng khi nhu cầu về độ mật là ưu tiên hàng đầu Tuy nhiên, hệ thống này khuyến khích việc nghiên cứu và đánh giá các hệ mã dòng khác Mật mã dòng đồng bộ mạnh là một sự thay thế hiệu quả cho hệ mật này Hệ mật mã dòng cho phép sinh ra nhiều dòng khóa từ một mầm ngắn và các véc tơ khởi tạo khác nhau, với mỗi dòng khóa có thể được sử dụng để mã hóa từng thông báo.

Mã dòng có ưu điểm nổi bật là được tạo ra bằng thuật toán, giúp tiết kiệm bộ nhớ lưu trữ Chúng rất phù hợp cho việc mã hóa thông tin trên máy tính điện tử cũng như các loại dữ liệu lớn như mã FAX, mã tiếng nói, và mã video.

Trong mã dòng, mục tiêu là làm cho các dòng khóa tương tự như các dòng khóa ngẫu nhiên trong hệ mật ngẫu nhiên, đồng thời giảm thiểu tác động tiêu cực đến khả năng bảo mật do tính chất xác định của khóa Các phần tiếp theo sẽ đi sâu vào vấn đề này.

CÁC ĐẶC TRƯNG

Trong nghiên cứu xây dựng phương pháp kiểm định dãy ngẫu nhiên mà không dựa vào lý thuyết xác suất, ba tiên đề về tính ngẫu nhiên của Golomb thường được nhắc đến Tuy nhiên, bài viết này sẽ không đi sâu vào các tiên đề đó (chi tiết có thể tham khảo [1]) Thay vào đó, chúng ta sẽ tập trung vào các vấn đề thực tiễn liên quan đến mật mã dòng đã được áp dụng trong thời gian gần đây.

2.2.1 Độ phức tạp tuyến tính

Độ phức tạp tính toán trong mật mã bao gồm nhiều loại, trong đó độ phức tạp tuyến tính là một trong những loại phổ biến và được nghiên cứu kỹ lưỡng Bài viết này sẽ tập trung vào độ phức tạp tuyến tính, vì nó không chỉ có ứng dụng rộng rãi mà còn mở ra hướng nghiên cứu cho các độ phức tạp khác.

2.2.1.1 Thanh ghi dịch phản hồi

Thanh ghi dịch phản hồi độ dài (bậc) n là một bộ gồm n ô nhớ A0, A1, , An-

1 và một hàm phản hồi f tác động trên các giá trị của các ô nhớ Ai Nó hoạt động như sau:

Giả sử tại thời điểm t, t=0,1, 2, giá trị của ô Ai là ai(t); i = 0, 1, , n-1, ai(t)

{0,1} Vậy thì, tại thời điểm (t+1) giá trị các ô A là

Sơ đồ kỹ thuật là:

Hình 2.1 Thanh ghi dịch phản hồi

Thanh ghi dịch phản hồi tuyến tính (LFSR) có độ dài L là một loại thanh ghi dịch sử dụng hàm phản hồi tuyến tính, được gọi là đa thức liên kết.

Khi quan sát tại ô A0 và lấy ra ak = a0(k), với k ≥ 0, ta nhận thấy rằng {ak} là dãy ghi dịch sinh ra từ thanh ghi dịch phản hồi bậc n với hàm phản hồi f Định nghĩa tổng quát này cho thấy mối liên hệ giữa các giá trị trong dãy và cấu trúc của thanh ghi dịch.

Dãy {ak}, k  0, với ai{0,1} được gọi là dãy ghi dịch bậc n, nếu tồn tại hàm f : {0,1} n →{0,1} sao cho: an+k = f(an-1+k, an-2+k , , ak ),  k  0

Hàm f trong định nghĩa này được gọi là hàm phản hồi, tạo ra dãy {ak} Dãy ghi dịch được phân loại là tuyến tính hoặc phi tuyến, tùy thuộc vào tính chất của hàm phản hồi f Hàm phản hồi tuyến tính có dạng tổng quát là f(a1, a2, …, an) = c1a1 ⊕ c2a2 ⊕ … ⊕ cnan, trong đó c1, c2, …, cn là các hằng số thuộc tập {0,1}.

Ví dụ, với chu kỳ (1,1,1,0,1,0,0) của dãy {ak} có chu kỳ 7, ta có thể định nghĩa hàm f(a2+k, a1+k, ak) = a2+k ⊕ ak Hàm f này là hàm tuyến tính và dãy {ak} thỏa mãn quan hệ truy hồi.

3 k ( 2 k , 1 k , k ), 0; a + = f a + a + a   k nghĩa là, {ak} là dãy ghi dịch tuyến tính bậc n = 3

Dãy ghi dịch tuyến tính bậc là tập hợp các phần tử s0, s1, thuộc {0,1}, thể hiện sự sắp xếp và biến đổi trong hệ thống Các dãy này có vai trò quan trọng trong lý thuyết thông tin và mã hóa, giúp tối ưu hóa quá trình truyền tải dữ liệu Việc hiểu rõ về dãy ghi dịch tuyến tính bậc sẽ hỗ trợ trong việc phát triển các ứng dụng công nghệ thông tin hiện đại.

L, nếu tồn tại các hằng số c1, c2, , cL{0,1}, sao cho quan hệ sau được thỏa mãn: sj = - c1.sj-1 – c2.sj-2 -…- cL.sj-L mod 2, j = L, L+1, (2.3) Qui ước dãy gồm toàn các số không được gọi là dãy ghi dịch bậc 0 Hiển nhiên một dãy ghi dịch được xác định hoàn toàn bởi quan hệ truy hồi (2.3) và các giá trị ban đầu s0, s1, , sL-1 Định nghĩa -Một LFSR bậc L được ký hiệu  L,C(D) , trong đó đa thức liên kết là

- Một LFSR được gọi là không suy biến nếu bậc của C(D) là L ( nghĩa là cL=1)

Nếu nội dung ban đầu của ô thứ i là si {0,1} với mỗi i, 0i L-1, thì [ sL-

1,…,s1,s0 ] được gọi là trạng thái ban đầu của LFSR

Hình 2.2 Thanh ghi dịch phản hồi tuyến tính bậc L tổng quát

2.2.1.3 Định nghĩa độ phức tạp tuyến tính:

Mệnh đề cho biết rằng nếu trạng thái ban đầu của LFSR bậc L là [sL-1,…,s1,s0], thì dãy ra s = s0, s1, s2,… được xác định duy nhất thông qua công thức truy hồi sj = (c1sj-1 + c2sj-2 + … + cLsj-L) mod 2, với j ≥ L.

Mệnh đề Mỗi dãy ra ( đối với tất cả các trạng thái ban đầu có thể) của một

LFSR  L,C(D)  được coi là tuần hoàn khi và chỉ khi đa thức liên kết C(D) có bậc L Nếu LFSR  L,C(D)  suy biến, tức là C(D) có bậc nhỏ hơn L, không phải mọi dãy ra đều tuần hoàn mà có dạng chữ Rho:  Tuy nhiên, các dãy ra sẽ trở thành tuần hoàn nếu loại bỏ một số hữu hạn các phần tử ở đầu dãy Do đó, từ đây trở đi, chúng ta chỉ xem xét các LFSR không suy biến.

Từ nay, ký hiệu s sẽ đại diện cho dãy nhị phân vô hạn với các số hạng s0, s1, s2,…, trong khi s n sẽ chỉ dãy hữu hạn có độ dài n với các số hạng s0, s1,…,sn-1 Định nghĩa, một LFSR được coi là sinh ra dãy s nếu có một trạng thái ban đầu nào đó cho phép LFSR tạo ra dãy s Tương tự, LFSR được xem là sinh ra dãy hữu hạn s n nếu có một trạng thái ban đầu nào đó khiến LFSR tạo ra n số hạng đầu tiên của s n.

Cho dãy hữu hạn s n = s0,s1,…,sn-1 Ta chọn số nguyên dương L= n Khi đó, LFSR sau đây sẽ sinh ra s n như n số hạng đầu của nó:

+ Trạng thái ban đầu là: [ sL-1,…,s1,s0 ]

Mỗi dãy nhị phân hữu hạn \( s_n \) đều có một LFSR ngắn nhất để sinh ra các số hạng đầu của nó Độ phức tạp tuyến tính của dãy nhị phân hữu hạn \( s_n \), ký hiệu là \( L(s_n) \), được xác định là độ dài của LFSR ngắn nhất sinh ra dãy \( s_n \) Đối với dãy nhị phân vô hạn \( s \), độ phức tạp tuyến tính \( L(s) \) được xác định như sau: i) Nếu \( s \) là dãy số không (s = 0,0…), thì \( L(s) = 0 \); ii) Nếu không tồn tại LFSR nào sinh ra \( s \), thì \( L(s) = \infty \); iii) Nếu có, \( L(s) \) là độ dài của LFSR ngắn nhất sinh ra dãy \( s \).

Xét dãy s = {sn} với các phần tử thuộc {0,1} Ta có các tính chất của dãy {L(s n )}n như sau

Mệnh đề về dãy nhị phân s có các đặc điểm quan trọng như sau: Đối với mọi n ≥ 1, giá trị L(s n) nằm trong khoảng từ 0 đến n L(s n) bằng 0 khi và chỉ khi s n là dãy zero độ dài n, và L(s n) bằng n khi s n có dạng 0,0,…,0,1 Nếu s là dãy tuần hoàn với chu kỳ N, thì L(s) không vượt quá N Tính đơn điệu không giảm được thể hiện qua L(s n) ≤ L(s n+1) cho mọi n ≥ 1 Đối với mối quan hệ giữa các phần tử liên tiếp của dãy {L(s n)}, nếu thanh ghi dịch phản hồi tuyến tính độ dài L(s n) sinh ra dãy s1, s2,…, sn và cũng sinh ra dãy s1, s2,…, sn, sn+1 thì L(s n+1) = L(s n) Ngược lại, nếu thanh ghi không sinh ra dãy s1, s2,…, sn, sn+1, sẽ có hai khả năng xảy ra.

Berlekamp-Massey đã phát triển một thuật toán hiệu quả để tính độ phức tạp tuyến tính của một dãy hữu hạn bất kỳ, đồng thời xác định đa thức liên kết (đa thức đặc trưng) tương ứng với dãy đó Chi tiết về chứng minh có thể được tham khảo trong [1].

Trong phần này, chúng ta sẽ trình bày thuật toán truy hồi để tạo ra một thanh ghi dịch phản hồi tuyến tính có độ dài L(s N), sinh ra dãy số s0, s1, , sN-1 với N = 1, 2, 3, Đa thức liên kết với thanh ghi dịch phản hồi tuyến tính được ký hiệu là C(D) = 1 + c1D + c2D^2 + + cLD^L, có bậc tối đa là L Nếu L = 0, ta lấy C(D) = 1, tương ứng với thanh ghi dịch có độ dài bằng 1.

Bây giờ với dãy s cho trước, ký hiệu

CÁC NGUYÊN LÝ THIẾT KẾ MẬT MÃ DÒNG

Hai mục tiêu chính khi thiết kế hệ thống mật mã là đảm bảo an toàn và tối ưu hóa hiệu suất Trong khi an toàn là ưu tiên hàng đầu, hiệu suất cũng cần được cải thiện, có thể đo bằng tốc độ, diện tích chip và mức tiêu thụ năng lượng Các yếu tố quan trọng khác bao gồm tính rõ ràng của thiết kế và tính linh hoạt trong triển khai Tuy nhiên, việc tạo ra một mã dòng vừa an toàn vừa nhanh chóng là thách thức lớn, vì hầu hết các mã dòng hiện có đều tồn tại những lỗ hổng.

Khi thiết kế mã dòng, cần phải thỏa hiệp giữa tốc độ phần mềm và phần cứng, vì việc tối ưu cả hai một cách đồng thời là điều khó khăn.

Rainer A Rueppel đã đề xuất bốn phương pháp nguyên lý để phát triển mật mã dòng, mỗi phương pháp dựa trên giả thuyết khác nhau về khả năng của nhà mã thám và định nghĩa về an toàn cũng như thành công trong việc thám mã Một số phương pháp này mang tính lý thuyết hơn là thực tiễn và chú trọng vào an toàn có thể chứng minh, điều mà thường khó đạt được trong các mật mã thực tế Dưới đây, chúng ta sẽ trình bày một số nguyên lý cơ bản để xây dựng mật mã dòng hiện đại.

- Thiết kế mật mã dòng dựa trên các LFSR

- Thiết kế mật mã dòng dựa trên mã khối;

- Những mã dòng không thực tế

- Thiết kế mật mã dòng dựa trên hàm hash

Khi đề cập đến thiết kế mã dòng, chúng ta chủ yếu tập trung vào việc thiết kế thuật toán sinh dòng khóa Hãy cùng khám phá từng nguyên lý liên quan đến vấn đề này.

2.3.1 Thiết kế mật mã dòng dựa trên các LFSR

Có thể tham khảo ở [2,3,5] về vấn đề này

2.3.1.1 Các bộ sinh tổ hợp phi tuyến

Bộ sinh tổ hợp phi tuyến sử dụng một số LFSR có chu kỳ cực đại để tạo ra dòng khóa Đầu ra của hàm bul phi tuyến f, được gọi là hàm tổ hợp, là dòng khóa, trong khi đầu vào của f là các đầu ra từ các LFSR này.

Nếu n LFSR có chu kỳ cực đại với độ dài l1, l2, , ln và sử dụng hàm phi tuyến f, độ phức tạp tuyến tính của dòng khóa được xác định bởi công thức f(l1, l2, , ln) = a0 + a1l1 + a2l2 + + anl n + a12l1l2 + + a12 nl1l2 ln, trong đó a0, a1, là các hệ số trong dạng chuẩn đại số của f.

Hàm tổ hợp được đánh giá trên các số nguyên thông thường, không phải trên trường hữu hạn F2 Mục tiêu là sử dụng hàm tổ hợp có bậc phi tuyến cao và đạt độ triệt tiêu tương quan cao để chống lại các tấn công tương quan.

2.3.1.2 Các bộ lọc phi tuyến

Bộ lọc phi tuyến kết hợp một LFSR với đầu ra từ hàm phi tuyến f, trong đó đầu vào của f là các trạng thái của LFSR Hàm f được gọi là hàm lọc Độ phức tạp tuyến tính tối đa của hệ thống này phụ thuộc vào độ dài n của LFSR và bậc phi tuyến m của hàm f.

Nếu n là số nguyên tố thì xác suất để dãy này có độ phức tạp tuyến tính L m là

Hình 2.4 Bộ lọc phi tuyến

Do đó khi n lớn xác suất này gần bằng 1

2.3.1.3 Các bộ sinh được điều khiển bằng đồng hồ

Bộ sinh được điều khiển bằng đồng hồ bao gồm ít nhất một LFSR và được bấm giờ theo quy tắc từ một phần của mã dòng Trong bộ sinh luân phiên, đầu ra của một LFSR sẽ xác định LFSR nào trong số hai LFSR còn lại sẽ được tính toán Đối với bộ sinh shrinking, hai LFSR cũng được bấm giờ theo quy tắc, trong đó nếu đầu ra của LFSR đầu tiên là 1, thì đầu ra của LFSR thứ hai sẽ đóng góp vào dòng khóa.

2.3 2 Thiết kế mật mã dòng dựa trên mật mã khối

Có hai kiểu hoạt động của mã khối theo chuẩn quốc tế ISO/IEC 10116:2006, chuyển mã khối thành mã dòng Các kiểu hoạt động này được chứng minh là an toàn với giả thiết rằng mã khối là an toàn Trong đó, Ci đại diện cho khối mã, Pi là khối rõ và Ek là hàm mã hóa của mã khối.

2.3.2.1 Kiểu phản hồi mật mã

Kiểu phản hồi mật mã (CFB) chuyển đổi mã khối thành mã dòng tự đồng bộ, sử dụng hàm tổ hợp XOR Khối tiếp theo của dòng khóa được xác định thông qua việc mã hóa khối mã cuối cùng.

C -1 = IV 2.3.2.2 Kiểu phản hồi đầu ra

Kiểu phản hồi đầu ra (OFB) có cấu trúc tương tự như kiểu phản hồi khối (CFB), nhưng mã dòng thu được là đồng bộ, tạo ra mật mã khác biệt Thay vì sử dụng mã khối cuối cùng, OFB mã hóa khối cuối cùng của dòng khóa để tạo ra kết quả.

Kiểu đếm (Counter Mode - CTR) là một phương pháp mã hóa hiện đại, trong đó dòng khóa được tạo ra bằng cách kết hợp IV với bộ đếm Bộ đếm có thể là bất kỳ hàm f(i) nào không lặp lại trong thời gian dài, với lựa chọn phổ biến nhất là f(i) = i Phương pháp CTR hỗ trợ truy cập ngẫu nhiên, giúp quá trình giải mã trở nên linh hoạt và hiệu quả hơn.

2.3.3 Các mật mã dòng dựa trên mật mã khóa công khai

Một số mã dòng như QUAD được phát triển dựa trên các thuật toán mã hóa khóa công khai Tuy nhiên, phương pháp này thường kém hiệu quả gấp 100 lần so với các mã dòng phổ biến, do đó không có giá trị thực tiễn.

2.3.4 Các kiểu thiết kế khác

Ngoài những thiết kế nói trên, người ta còn có những kiểu thiết kế khác nữa Chẳng hạn, sinh các dòng khóa từ các hàm hash.

MỘT SỐ MẬT MÃ DÒNG: ỨNG VỚI DÒNG KHÓA LÀ DÃY BÍT, DÒNG KHÓA LÀ DÃY BYTE

2.4.1 Dòng khóa là dãy bít

2.4.1.1 Dãy sinh khóa Geffe P.R Đây là mã dòng dựa trên tổ hợp phi tuyến cacs LFSR

Giả sử R, S, T là các m-dãy có bậc r, s, t đôi một nguyên tố cùng nhau, được sinh bởi các thanh ghi dịch tương ứng Để tạo ra dãy nhị phân P.R Geffe, ký hiệu là Z = {zk}k, tại thời điểm nguyên k > 0, nếu sk = 1 thì zk = rk; nếu sk = 0 thì zk = tk Công thức toán học biểu diễn bộ tạo dãy nhị phân P.R Geffe là zk = rk sk ⊕ [sk⊕1] tk.

Rõ ràng, đầu ra zk là tổ hợp phi tuyến của các dãy nhị phân đầu vào rk và tk rk sk zk tk

Hình 2.5 Sơ đồ bộ tạo dãy nhị phân P.R Geffe

Ký hiệu p, d, q lần lượt là chu kỳ của các m-dãy R, S, T Dãy P.R Geffe có một số tính chất sau

Tính chất 1: Ký hiệu T và  lần lượt là chu kỳ và độ phức tạp tuyến tính của dãy Z Khi đó ta có:

Tính chất 2: Phân bố tần số đơn của dãy Z được tính bởi công thức sau:

N(Z) = T - E(Z) và do đó tỉ số độ lệch phân bố tần số đơn của Z sẽ là:

Hàm tự tương quan chuẩn hóa của dãy Z có 8-mức, với mức nhỏ nhất xuất hiện tại hầu hết các giá trị bước tương quan Mức này được tính theo một công thức cụ thể.

Đối với dãy ghi dịch phản hồi tuyến tính có chu kỳ cực đại (m-dãy) với chu kỳ p, có thể chứng minh rằng hàm tự tương quan có thể được biểu diễn một cách chính xác.

Phép chứng minh các tính chất này có thể xem ở [1]

Bộ tạo Geffe không đảm bảo an toàn trước tấn công phân rã tương quan của Siegenthaler Tuy nhiên, việc sử dụng các hàm tổ hợp miễn dịch tương quan có thể cải thiện độ an toàn bằng cách tác động vào ba m-dãy cơ sở trong mô hình Dãy tổ hợp phi tuyến cho thấy độ an toàn cao hơn so với dãy Geffe, đặc biệt là dãy luân phiên.

2.4.1.2 DÃY D'BRUIJN (dãy phi tuyến chu kỳ cực đại) Đây là lớp dãy phi tuyến chu kỳ cực đại tương ứng với bậc của nó Có thể xem dãy D'Bruijn như một lớp dãy cơ sở để tạo ra một số dãy giả ngẫu nhiên có độ an toàn cao Định nghĩa:

Dãy nhị phân D'Bruijn bậc n là một chuỗi có chu kỳ 2^n, trong đó mỗi đoạn mẫu gồm n phần tử xuất hiện đúng một lần trong mỗi chu kỳ của dãy.

Một dãy D'Bruijn bậc n không thể được tạo ra từ một thanh ghi dịch tuyến tính bậc n, mà chỉ có thể sinh ra từ một thanh ghi dịch phi tuyến cùng bậc.

Phương pháp tạo dãy D'Bruijn:

Giả sử g(x) là đa thức nguyên thủy bậc n và liên kết với thanh ghi dịch phản hồi tuyến tính bậc n, thanh ghi này sẽ tạo ra hai chu trình: một chu trình có độ dài 2^n - 1 với các trạng thái ban đầu khác không, gọi là m-dãy, và một chu trình khác có độ dài 1 với trạng thái ban đầu toàn không Tổng độ dài của hai chu trình là 2^n, tương ứng với số tất cả các trạng thái khác nhau của thanh ghi dịch bậc n Từ đó, chúng ta có thể xây dựng dãy D'Bruijn.

Nối hai chu trình từ thanh ghi dịch bậc n với đa thức nguyên thủy tương ứng là một phương pháp quan trọng Cụ thể, chúng ta cần chèn thêm số 0 vào đoạn gồm (n-1) phần tử 0 của chu trình m-dãy Qua đó, chúng ta sẽ tạo ra dãy D'Bruijn bậc n Quá trình này có thể được thực hiện thông qua cấu trúc của thanh ghi dịch phản hồi phi tuyến.

Hàm phản hồi phi tuyến F(an-1, an-2, , a0) được xác định thông qua biểu thức liên quan đến hàm phản hồi f(an-1, an-2, , a0) của thanh ghi dịch, tạo ra m-dãy bậc n tương ứng.

F(an-1, an-2, , a0) = f(an-1, an-2, , a0)(an-11).(an-2 1) (a1 1)

Trong đẳng thức trên, f(an-1, an-2, , a0) đại diện cho hàm phản hồi liên kết với đa thức nguyên thủy bậc n, có vai trò tạo ra m-dãy Số hạng thứ hai là tích của phần bù (n-1) ô nhớ, giúp thêm bít 0 vào đoạn (n-1) toàn 0 của m-dãy khi phát hiện đoạn (n-1) số 0 đặc biệt này.

Có nhiều phương pháp để tạo ra dãy D'Bruijn, trong đó có phương pháp sử dụng bộ lọc phi tuyến để tạo dãy giả ngẫu nhiên Bài viết này sẽ tập trung vào việc minh họa phương pháp này và nghiên cứu các tính chất của dãy được tạo ra.

Dãy D'Bruijn bậc n có những đặc điểm nổi bật như sau: đầu tiên, chu kỳ của dãy là 2^n, đảm bảo tính lặp lại Thứ hai, các đoạn n bit trong dãy được phân bố đều, tạo sự đồng nhất Thứ ba, độ phức tạp của dãy nằm trong khoảng từ 2^(n-1) + n đến 2^n - 1, cho thấy sự đa dạng trong cấu trúc Thứ tư, hàm tự tương quan của dãy phụ thuộc vào phương pháp tạo ra dãy cụ thể Cuối cùng, lực lượng các dãy D'Bruijn được tính bằng M = 2^(2n - 1 - n), thể hiện số lượng dãy có thể tạo ra.

Nhận xét chung về dãy D'Bruijn:

Dãy D'Bruijn bậc n có độ phức tạp tuyến tính cao và phân bố đều cho tất cả các đoạn mẫu n phần tử Mặc dù dãy này không có tương quan tối ưu như m-dãy, tính tương quan của nó phụ thuộc vào phương pháp tạo ra Cụ thể, tương quan địa phương của dãy D'Bruijn phụ thuộc vào các m-dãy trong cấu trúc bộ tạo.

Do vậy, về nguyên tắc dãy D'Bruijn chỉ có thể dùng làm dãy cơ sở bên trong các bộ tạo giả ngẫu nhiên

2.4.1.3 Dãy được điều khiển bằng đồng hồ

Bộ Shrinking sử dụng đồng hồ để tạo ra dãy khóa, kết hợp hai dãy giả ngẫu nhiên (LFSR) nhằm tạo ra dãy thứ ba với chất lượng vượt trội hơn Dãy khóa này có tính chất khó đoán cao hơn so với các dãy ban đầu.

CHƯƠNG TRÌNH MAPLE THỰC HIỆN MỘT SỐ MẬT MÃ DÒNG: THUẬT TOÁN VÀ ĐỘ AN TOÀN

Để hiểu sâu về lập trình trên Maple, đặc biệt phần mở rộng trường GF(p n ), xin xem [2]

Ta chọn 3 dãy như sau:

-Dãy r có đa thức đặc trưng nguyên thủy là f5= x 5 +x 4 +x 3 +x+1; với trạng thái ban đầu [1,0,0,0,0]

- Dãy s có đa thức đặc trưng nguyên thủy là f7=x 7 +x 4 +1; với trạng thái ban đầu [1,0,0,0,0,0,0]

- Dãy t có đa thức đặc trưng nguyên thủy là f11= x 11 +x 9 +x 8 +x 6 +1; với trạng thái ban đầu [1,0,0,0,0,0,0,0,0,0,0]

Chọn đa thức nguyên thủy: Ta xây dựng trường mở rộng R=GF(2 5 ) trên

Maple và Maple chọn đa thức sinh là f5:= Câu lệnh thứ 3 chứng tỏ rằng f5 là đa thức nguyên thủy

Làm tương tự để chọn các đa thức nguyên thủy khác:

> Để chọn trạng thái ban đầu cho các LFSR ta chọn ngẫu nhiên một phần tử của trường mở rộng GF(2 p ):

Giá trị tương ứng của trạng thái ban đầu là: 10010010100

Giá trị tương ứng của trạng thái ban đầu là: 0110101

Giá trị tương ứng của trạng thái ban đầu là: 11101

Chương trình gán trạng thái ban đầu cho 3 dãy R, S, T:

Sinh các phần tử của các dãy R và S (ngắn hơn dãy T) và Z ở giai đoạn chưa có đồng bộ ở cả 3 dãy:

Sinh dãy Z từ cả 3 dãy đồng bộ:

2.5.2 DÃY D'BRUIJN (dãy phi tuyến chu kỳ cực đại)

Hàm phản hồi có dạng:

F(an-1, an-2, , a0) = f(an-1, an-2, , a0)(an-11).(an-2 1) (a1 1)

Ta chọn dãy S ở trên để tạo dãy De’Bruijn trong Maple:

Chú ý rằng đây là một chu trình của dãy De’Bruijn, trong kết quả có một đoạn có 7 số 0 liên tiếp và tổng số số 1 là 64

Ta sẽ chọn 2 dãy có chu kỳ ngắn R và S ở trên, nhưng bây giờ gọi là các dãy

Phần đầu của dãy Shrinking:

Thật ra dãy z có chu kỳ là 1984=(2 5 -1)*2 7-1 = 31*64 Ta trích đại diện vì lý do tiết kiệm

Lưu ý rằng bạn có thể kết hợp các đoạn mã đã nêu trong một worksheet của Maple để tạo thành một chương trình hoàn chỉnh Những chương trình Maple được trình bày ở đây đã được thử nghiệm thành công trên phiên bản Maple 13.

Các dãy này có tham số cài đặt mang tính mô phỏng, do đó không thể xác định độ an toàn của chúng Để hiểu rõ hơn về vấn đề này, vui lòng tham khảo mục 2.4.

Các dãy mã khối đã được trình bày chi tiết ở mục 2.4.1.4, do đó không cần thiết phải có chương trình mô phỏng Tương tự, các dãy được sinh ra từ khóa công khai cũng không được đề cập trong phần này.

CÂU HỎI ÔN TẬP VÀ BÀI TẬP

1 Lập trình trên ngôn ngữ Maple thuật toán tổng hợp thanh ghi dịch tuyến tính Belerkamp-Massey cho dãy nhị phân S = (0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1,

0, 1,0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1) Hãy cho biết độ phức tạp thuật toán và đa thức đặc trưng liên kết của nó

2 Phân tích các đặc trưng của dòng khóa Theo anh (chị), để nâng cao độ an toàn của mã dòng, các đặc trưng đó cần thỏa mãn thêm những điều kiện gì?

3 Phân tích các nguyên lý thiết kế mã dòng Hãy so sánh và nêu ví dụ

4 Hãy dùng Maple để chọn các đa thức nguyên thủy (khác các đa thức nguyên thủy đã có trong giáo trình) Từ đó viết chương trình thực hiện từng loại mã dòng được nêu trong giáo trình

5 Hãy kiểm tra đánh giá các mã dòng nói ở bài tập 4 bằng 5 test thống kê phổ biến và tổng hợp kết quả đánh giá đó.

MẬT MÃ KHỐI

ĐỊNH NGHĨA MÃ KHỐI

Mật mã khối, hay mã khối, thực hiện việc mã hóa và giải mã các thông báo có kích thước tương đương với kích thước khối dữ liệu của nó Khi chiều dài của thông báo lớn hơn kích thước khối dữ liệu, thông báo sẽ được chia thành các khối dữ liệu liên tiếp, và mã khối sẽ xử lý từng khối một cách tuần tự.

Hệ mật khóa bí mật (khóa đối xứng) được phân thành hai loại chính: hệ mã khối và hệ mã dòng Một mã khối khóa đối xứng n-bit được định nghĩa là một hàm e: {0, 1} n × {0, 1} l → {0, 1} n, trong đó (p, k) → e(p, k) Với mỗi khối rõ p thuộc {0, 1} n và mỗi khóa k thuộc {0, 1} l, hàm mã hóa e(p, k) là một ánh xạ có ngược e k (p): {0, 1} n → {0, 1} n Ánh xạ ngược này được gọi là hàm giải mã, ký hiệu là d k (c): {0, 1} n → {0, 1} n, trong đó c = e k (p) thể hiện rằng mã hóa bản rõ p sử dụng khóa k để tạo thành bản mã c, đảm bảo rằng d k (c) = p nếu c = e k (p).

Tính đối xứng của mã khối xuất phát từ việc sử dụng cùng một khóa cho cả mã hóa và giải mã Để đảm bảo rằng bản mã có thể được giải thành bản rõ duy nhất với một khóa cố định, hàm mã hóa cần phải là song ánh, điều này giới hạn số lượng các hàm mã đến (2 n )! hoán vị với n-bit Mặc dù giá trị này rất lớn với các giá trị n thông thường (64, 128 hoặc 256 bit), kích thước khóa lại hạn chế số lượng hoán vị khả thi Độ dài khóa thường dùng lên đến 256 bit sẽ tạo ra 2 l khóa khả dụng, cho thấy rằng số lượng này (2 256 ) chỉ là một phần rất nhỏ so với tổng số hoán vị (2 256 )! Do đó, mục tiêu thực tế là ngăn chặn đối phương nhận diện bản rõ từ bản mã mà không có thông tin về khóa bí mật.

Các hệ mã khối có lợi thế là dễ dàng chuẩn hóa, do các đơn vị xử lý thông tin hiện nay thường ở dạng khối như byte hoặc từ.

Nhược điểm lớn nhất của mã khối là khả năng không che dấu được các mẫu dữ liệu, dẫn đến việc các khối mã giống nhau có thể suy ra các khối rõ cũng giống nhau Tuy nhiên, vấn đề này có thể được khắc phục bằng cách sử dụng phương pháp mã hóa chuỗi khối (CBC-Cipher Block Chaining mode), trong đó hàm mã hóa không chỉ áp dụng lên khối rõ mà còn kết hợp với tổng XOR của khối mã trước đó Phương pháp này mang lại tính bảo mật cao hơn, tương tự như mã dòng nhưng áp dụng cho các khối dữ liệu lớn.

CÁC LOẠI CẤU TRÚC PHỔ BIẾN CỦA MÃ KHỐI

Các mã khối hiện đại tuân thủ nguyên lý xáo trộn (confusion) và khuếch tán (diffusion) do Shannon đề xuất Xáo trộn giúp làm mờ mối quan hệ giữa bản rõ và bản mã, trong khi khuếch tán phân tán các mẫu trong bản rõ, khiến chúng khó phát hiện trong bản mã Shannon gợi ý rằng xáo trộn có thể được tạo ra thông qua các phép biến đổi thay thế, và khuếch tán có thể đạt được bằng cách sử dụng các phép biến đổi tuyến tính, thường được gọi là tầng tuyến tính Như vậy, xáo trộn làm phức tạp quá trình phục hồi các liên hệ giữa tính chất thống kê của bản rõ và bản mã.

Khuếch tán là quá trình lan truyền ảnh hưởng của ký tự bản rõ tới một số lượng lớn ký tự bản mã, giúp làm phẳng tác động của các tính chất thống kê từ bản rõ lên bản mã.

Hai cấu trúc mật mã chính là mạng thay thế- hoán vị (SPN) và mạng Feistel, sử dụng các phép biến đổi thay thế và tuyến tính theo nguyên lý của Shannon Cả hai đều là ví dụ về mật mã tích, được xây dựng từ việc sắp xếp các phép mã hóa theo trật tự hai hoặc nhiều hơn Mật mã tích thường mạnh hơn từng thành phần riêng lẻ Mật mã lặp là một dạng mật mã tích, trong đó một bước mã hóa được lặp lại, gọi là vòng Mỗi vòng có thể bao gồm nhiều bước mã hóa, và thường sử dụng các tư liệu khóa khác nhau cho từng vòng.

3.2.1 Các thuật toán lược đồ khóa

Trong các mã khối, tư liệu khóa thường được trộn với khối trung gian qua từng vòng Các thuật toán lược đồ khóa tách tạo ra nhiều khóa con từ khóa gốc, với mỗi khóa con được tích hợp vào vòng tương ứng Ngoài ra, khóa con bổ sung có thể được sinh và trộn ở các điểm khác trong quá trình mã hóa để ngăn chặn kẻ tấn công nhận diện đầu vào hoặc đầu ra, hiện tượng này được gọi là sự tẩy trắng Một thuật toán lược đồ khóa thiết kế kém có thể làm giảm độ an toàn của mã hóa, dẫn đến các tấn công như tấn công khóa quan hệ Để khắc phục vấn đề này, nhiều nhà thiết kế mật mã đã phát triển các thuật toán lược đồ khóa mạnh mẽ, như AES, Camellia, Twofish và Serpent, bằng cách kết hợp chặt chẽ các đặc điểm của chính mật mã.

Trong bài viết này, chúng ta giả định rằng khóa k là độc lập, được tạo ra từ một phân phối đều trên {0,1}N Giả thuyết này giúp đơn giản hóa nhiều phân tích và thể hiện tình trạng khóa khó tấn công nhất Các thuật toán lược đồ khóa thường chỉ tạo ra một tập nhỏ các véc tơ khóa con, có thể bộc lộ những điểm yếu riêng biệt từ các thuật toán mã hóa/giải mã Do đó, giả định khóa độc lập là một chiến lược khôn ngoan cho nhà mã thám, vì tấn công thành công trong mô hình này có thể có tỷ lệ thành công cao hơn khi có quan hệ giữa các khóa con Các nhà thiết kế mật mã cũng dựa vào giả định này khi đánh giá khả năng kháng lại các tấn công khác nhau, nhưng cần xem xét cẩn thận các đặc điểm của thuật toán lược đồ khóa.

3.2.2 Các mạng thay thế- hoán vị (SPN)

Mạng thay thế-hoán vị (SPN) R vòng yêu cầu (R+1) khóa con N bít k 1 , k 2 , …, k R , k R+1 Mỗi vòng gồm 3 tầng:

• Trong tầng trộn khóa, đầu vào N bít của vòng được XOR theo bít với khóa con của vòng đó

Trong tầng thay thế, khối kết quả được chia thành M khối con, mỗi khối có kích thước n (với N = M.n) Mỗi khối con này sẽ trở thành đầu vào cho hộp song ánh thay thế có kích thước n × n (hộp S).

Trong tầng tuyến tính của mạng thay thế, đầu ra từ tầng thay thế được xử lý qua biến đổi tuyến tính có ngược N bít, thường được gọi là hoán vị bít Biến đổi này có thể được biểu diễn dưới dạng ma trận nhị phân có ngược L Tuy nhiên, phép biến đổi tuyến tính này thường không được áp dụng ở vòng cuối, vì việc thêm nó không làm tăng sức mạnh mật mã cho SPN.

Khóa con cuối cùng k R+1 được kết hợp với đầu ra của vòng R thông qua phép XOR để tạo thành bản mã Giả định rằng mỗi vòng sử dụng cùng một phép biến đổi tuyến tính Nếu không có thông tin đặc biệt nào, các hộp S sẽ không bị giới hạn.

Hình 3.1 Sơ đồ một vòng mã hóa

Hình 3.2 minh họa một ví dụ về SPN với các tham số N, M=n=4 và R=3 Các biến đổi trong SPN thường là những phép toán có thể thực hiện hiệu quả trên phần cứng, điển hình như phép XOR.

Các mã khối Rijndael, Square, Shark, BKSQ, là các mã khối có cấu trúc SPN

Hình 3.2 Cấu trúc SPN với N, M=n=4, R=3

Giải mã được thực hiện bằng cách chạy SPN theo chiều ngược lại Đầu tiên, khóa con k R+1 được XOR với bản mã, sau đó trong mỗi vòng r (từ R đến 1), áp dụng phép biến đổi tuyến tính ngược, tiếp theo là các hộp S ngược, và cuối cùng, khối kết quả được XOR với k r.

Cấu trúc Feistel, được đặt theo tên nhà mật mã học Horst Feistel, là nền tảng của nhiều mã khối nổi tiếng, bao gồm DES, Blowfish, và RC5 Thiết kế của Feistel, bắt nguồn từ mã khối Lucifer của IBM, đã trở thành một tiêu chuẩn quan trọng trong lĩnh vực mã hóa Hiện nay, phần lớn các hệ mã khối trên thế giới đều sử dụng cấu trúc Feistel hoặc các biến thể của nó, như CAST-128, LOKI97, và Twofish.

Mã Feistel được mô tả như sau:

Chia khối bản rõ thành 2 nửa bằng nhau P = (L 0 , R 0 ) có độ dài 2L, và

L0 = R0 = L Với mỗi vòng i = 1, 2, , n, ta tính:

R i = L i-1 (R i-1 , K i ) trong đó  là hàm vòng và K i là các khóa con

Mỗi K i được tương ứng với một phép biến đổi f i trên khối Bản mã là C = (R n , L n ) (bản mã được đảo ngược hai nửa sau của vòng n)

Phép giải mã được thực hiện giống như phép mã hóa, chỉ cần thay đổi thứ tự sử dụng khóa và các hàm vòng tương ứng.

Hình 3.3: Cấu trúc mạng Feistel cơ bản

- Độ dài của mỗi khối (block) rõ bằng độ dài của mỗi khối mã, và là một số chẵn m = 2L

Cấu trúc mã Feistel rất hiệu quả cho việc mã hóa, mang lại tốc độ nhanh chóng và hỗ trợ tốt cho việc cứng hóa các chương trình mã hóa khối.

Các hàm vòng f i có thể có cấu trúc giống nhau, tức là f i = f, miễn là chúng có tính chất mật mã tốt, điều này sẽ giúp thuận tiện hơn cho việc thao tác mã dịch.

Một trong những ưu điểm quan trọng của sơ đồ là tính đối xứng giữa hai quá trình mã hóa và giải mã Độ an toàn của hệ mật hoàn toàn phụ thuộc vào độ an toàn của hàm f.

NGUYÊN LÝ THIẾT KẾ MÃ KHỐI

Có hai nguyên lý thiết kế quan trọng cho các mã an toàn, đó là nguyên lý độ xáo trộn (confusion) và độ khuyếch tán (diffusion), được đề xuất bởi Shannon.

Nguyên lý về độ xáo trộn (confusion):

Sự phụ thuộc giữa khóa trên bản rõ và bản mã cần phải được thiết kế phức tạp để ngăn chặn việc thám mã Ví dụ, phương trình nhị phân mô tả mã khối nên mang tính phi tuyến và phức tạp, đảm bảo rằng việc giải khóa z từ x và y = E(x, z) là không khả thi.

Nguyên lý về độ khuyếch tán (diffusion):

Trong mỗi khóa mã hóa cụ thể, cần đảm bảo không có sự phụ thuộc thống kê giữa các cấu trúc đơn giản trong bản rõ và bản mã Điều này có nghĩa là không tồn tại quan hệ đơn giản giữa các hàm mã hóa khác nhau Nguyên lý khuyếch tán yêu cầu rằng hệ mã khối phải được thiết kế một cách hoàn thiện, với mỗi bit rõ và mỗi bit khóa đều ảnh hưởng đến mỗi bit mã.

Nguyên lý thiết kế cho ứng dụng

Hệ mã khối có thể được áp dụng cho cả phần cứng và phần mềm, với phần cứng thường sử dụng các chip VLSI có tốc độ cao, trong khi phần mềm yêu cầu tính linh hoạt và chi phí thấp Dựa trên những đặc điểm khác nhau giữa phần cứng và phần mềm, nguyên lý thiết kế cho mã khối cũng được chia thành hai phần riêng biệt.

Nguyên lý thuyết kế cho ứng dụng mềm

Khi sử dụng khối con, các thao tác mã khối nên được thực hiện trên các khối con có độ dài tự nhiên là 8, 16 hoặc 32 bit Việc hoán vị bit trong phần mềm là khó khăn, do đó cần tránh thực hiện.

Sử dụng các phép toán đơn giản là cần thiết, vì các thao tác mã trên các khối con nên được chọn sao cho dễ dàng áp dụng với các tập lệnh cơ bản của các bộ xử lý chuẩn, bao gồm phép cộng, phép nhân và phép dịch.

Nguyên lý thuyết kế cho ứng dụng phần cứng

Sự tương đồng giữa mã hóa và giải mã nằm ở việc chúng chỉ khác nhau ở cách sử dụng khóa mật Cả hai quá trình này đều có thể được thực hiện trên cùng một thiết bị, cho phép tối ưu hóa hiệu suất và tính linh hoạt trong việc bảo mật thông tin.

Cấu trúc đều:Hệ mã nên có cấu trúc môđun đều để có thể dễ ứng dụng công nghệ VLSI.

GIỚI THIỆU MỘT SỐ MÃ KHỐI: CẤU TRÚC, THUẬT TOÁN VÀ ĐỘ AN TOÀN

Trong thế giới mật mã, có nhiều ứng dụng thực tế cho các thuật toán mã khối như DES, 3DES, AES, và Camellia Bài viết này sẽ tập trung vào việc mô tả hai mã khối nổi tiếng: DES và Camellia, bao gồm cấu trúc, thuật toán và mức độ an toàn của chúng Độc giả có thể tham khảo thêm các chương trình minh họa các thuật toán này trong phần phụ lục.

3.6.1 Chuẩn mã hóa dữ liệu DES

DES, được mô tả chi tiết trong Công báo về chuẩn xử lý thông tin Liên bang số 46 ngày 15 tháng 1 năm 1977, là một phương pháp mã hóa dữ liệu Nó mã hóa một dòng bit rõ x có độ dài 64 bit bằng khóa K có độ dài 56 bit, và kết quả là bản mã y, cũng có độ dài 64 bit.

Cấu trúc mã khối DES bao gồm:

- Lược đồ tạo hệ thống khóa

Giai đoạn 1 Cho bản rõ x, ta tính được x0 qua việc hoán vị các bit của x theo hoán vị đầu IP:

L0 là 32 bit đầu tiên của x0 còn R0 là 32 bit còn lại, và IP là hoán vị đầu cố định

Bảng 3.4 Hoán vị đầu x0 = IP (x) = L0R0

Dấu “” biểu thị phép toán “hoặc loại trừ” giữa hai dãy bit, trong khi f là một hàm sẽ được thảo luận sau Ki là các dãy bit dài 48 bit được sinh ra từ khoá K thông qua một thuật toán riêng.

Giai đoạn 3 Bản mã y được tính bởi hoán vị IP -1 của R16L16, chú ý đảo ngược vị trí của L16 và R16

Bảng 3.5 Hoán vị IP -1 y = IP -1 (R16L16)

Hàm f(A, J) nhận đầu vào là đối số A, một dãy 32 bit, và đối số J, một dãy 48 bit, với đầu ra là một dãy 32 bit Các bước thực hiện hàm này sẽ được mô tả chi tiết trong bài viết.

Bước 1 Mở rộng A từ 32 bit thành 48 bit: Đối số A được mở rộng thành 48 bit nhờ toán tử E

Kết quả B được tách thành các khối 6 bit liên tiếp từ B1B2 B8, cụ thể là B = B1B2 B8

Mỗi hộp Si là một mảng hai chiều 4x16 , mỗi dòng chứa các giá trị từ 0 đến 15 Ta có đầu vào Bj là một dãy 6 bit

Bj = b1b2b3b4b5b6 Hai bit b1b6 xác định biểu diễn nhị phân của r là chỉ số dòng của

Sj (0  r  3), và 4 bit b2b3b4b5 xác đinh biểu diễn nhị phân của c là chỉ số cột của Sj (0  c 15) Sau đó Sj(Bj) là số gồm 4 bit nằm ở toạ độ (r,c) của mảng

2 chiều Theo cách này, ta ký hiệu

Bước 4 Dòng bit C= C1C2C3C4C5C6C7C8 với độ dài 32 bit được đổi chỗ theo hoán vị P Kết quả dãy P(C) chính là f(A,J) Cụ thể f(A,J) = P(C)

3.6.1.2 Lược đồ tạo hệ thống khoá :

Khoá K là một chuỗi 64 bit, trong đó các bit ở vị trí 8, 16, 24, 32, 40, 48, 56, và 64 được sử dụng làm bit kiểm tra và sẽ bị loại bỏ trong quá trình tạo khoá Sau khi loại bỏ, chúng ta còn lại 56 bit đầu vào Bằng cách hoán vị 56 bit này theo bảng PC-1, ta có thể xác định được C0 và D0, trong đó C0 là 28 bit đầu tiên và D0 là 28 bit còn lại.

LSi thực hiện phép dịch trái quay vòng một hoặc hai bit, tùy thuộc vào giá trị của i Cụ thể, nếu i bằng 1, 2, 9, hoặc 16 thì sẽ dịch một bit; còn với các giá trị khác của i, phép dịch sẽ là hai bit Giá trị Ki được tính toán theo CD thông qua bảng hoán vị PC-2.

Bảng 3.8 Hoán vị PC-1 Bảng 3.9 Hoán vị PC-2

Như vậy ta đã có một thuật toán hoàn chỉnh về mã hoá dữ liệu theo tiêu chuẩn DES

Để giải mã một dãy ký tự đã được mã hóa, ta thực hiện các bước tương tự như trong quá trình mã hóa, nhưng hệ thống khóa được tạo ra theo chiều ngược lại.

- Cho bản rõ x - Cho bản mã y

Có bản mã y y0 = IP(y) = IP(IP -1 (R16L16 )) = R16L16 = L’0R’0

L’1 = R15 ; R’1 = L15 ; Tương tự như vậy cho đến khi i = 16, ta sẽ có :

Thuật toán giải mã và thuật toán mã hoá chỉ khác nhau ở việc tạo ra hệ thống khoá Cụ thể, trong khi mã hoá tạo khoá từ k1, k2, , k16, thì giải mã sẽ tạo ra hệ thống khoá theo thứ tự ngược lại từ k16, k15, , k1.

3.6.1.4 Độ an toàn của DES

Sự tranh cãi về an toàn của DES được bắt đầu ngay sau khi nó được đề nghị như chuẩn mã dữ liệu

Lời chỉ trích lớn nhất về DES là kích thước không gian khóa 2^56 quá nhỏ và không đủ an toàn Các máy tính đặc biệt được đề xuất để tấn công các bản rõ đã biết, tìm kiếm khóa bằng cách kiểm tra từng khóa cho đến khi tìm được khóa k thỏa mãn ek(x)=y Vào đầu năm 1977, Diffie và Hellman đã gợi ý rằng một chip VLSI có thể kiểm tra 10^6 khóa mỗi giây, cho phép tìm kiếm toàn bộ không gian khóa trong khoảng một ngày với chi phí khoảng 20 triệu USD và mỗi lời giải có giá 5000 USD Tại hội nghị CRYTO’93, Michael Wiener đã trình bày thiết kế chi tiết cho một máy dò khóa, sử dụng chip dò khóa nối tiếp cho phép thực hiện 16 phép mã hóa đồng thời, có khả năng kiểm tra 5×10^7 khóa mỗi giây với giá 10,5 USD mỗi chip Một khung 5760 chip có thể được xây dựng với chi phí 100.000 USD, cho phép tìm khóa DES trung bình trong khoảng 1,5 ngày Sử dụng 10 khung, chi phí sẽ là 1.000.000 USD nhưng thời gian dò trung bình giảm xuống còn 3,5 giờ.

Vào ngày 15 tháng 7 năm 1998, một liên minh gồm Nghiên cứu Mật mã, Công nghệ không dây tiên tiến và Cơ sở giới hạn điện tử đã công bố tấn công tìm kiếm khóa DES Họ đã phát triển máy tìm kiếm khóa DES Cracker (hay Deep Crack) với chi phí dưới 250.000 USD và thành công trong việc tìm ra khóa của thách đố DES của RSA sau 56 giờ tìm kiếm Kết quả này chứng minh rằng khóa 56 bít là quá ngắn và không đủ an toàn cho mật mã vào cuối những năm 1990.

Các nhà thiết kế mật mã không chỉ chống lại việc tìm kiếm vét cạn mà còn hy vọng rằng đó là phương thức duy nhất của nhà mã thám Với công nghệ tính toán của những năm 1970, DES đã trở thành một mật mã rất thành công.

Để vượt qua giới hạn của khóa ngắn, một giải pháp hiệu quả là thực hiện thuật toán DES nhiều lần với các khóa khác nhau Giải pháp này được gọi là lược đồ DES bộ ba, bao gồm quá trình mã hóa-giải mã-mã hóa.

Bên cạnh việc mở rộng hiệu quả không gian khóa, lược đồ này còn cho phép tính toán đơn giản với DES khi sử dụng K1=K2 Ngoài ra, DES bộ ba có khả năng sử dụng ba khóa khác nhau, tuy nhiên sẽ không tương thích với khóa đơn.

Ngoài tấn công vét cạn khóa, hai phương pháp tấn công quan trọng và mạnh mẽ nhất đối với thuật toán DES là tấn công lượng sai (LS) và tấn công tuyến tính (TT).

3.6.1.5 DES trong thực tế Ngay cả khi việc mô tả DES khá dài dòng thì DES được thực hiện rất hiệu quả, trong cả phần cứng lẫn phần mềm Những phép toán số học duy nhất được thực hiện là phép XOR của các xâu bít Hàm mở rộng E, các hộp S, hoán vị IP và P, và việc tính toán K1,K2, K16 tất cả được thực hiện trong thời gian không đổi bởi bảng tìm kiếm trong phần mềm hoặc bằng cách nối dây cứng chúng vào một mạch

THUẬT TOÁN VÀ CHƯƠNG TRÌNH TÍNH XÁC SUẤT LƯỢNG

3.7.1 Thuật toán tính các xác suất lượng sai và tuyến tính cực đại

Với song ánh B: {0, 1} n → {0, 1} n , và Xor đầu vào và đầu ra cố định:

 , ta có xác suất lượng sai như sau: DP(  X , Y ) = Prob{B(x)

 B(x   X ) =  Y } Xác suất lượng sai cực đại được tính bằng:

Thuật toán tính xác suất lượng sai cực đại:

Input: song ánh B (bảng tra giá trị của B(x) theo x) Output: Xác suất lượng sai cực đại p được tính trên B

Max =0; // Khởi tạo xác suất lượng sai cực đại bằng 0 for  X =1 to 2 n -1 do //  X dạng thập phân

{ for  Y =1 to 2 n -1 do //  Y dạng thập phân {

2 Chuyển  Y sang dạng vecto nhị phân

3 for x=0 to 2 n -1 do // 2 n khả năng của x

// Chuyen x,  X ,  Y sang dạng vecto nhị phân

3.1 Tính B(x), B(x   X ) (tra bảng) rồi chuyển sang nhị phân

3.3 Nếu tam =  Y thì tăng biến đếm: d = d+1 }

4 Xác suất lượng sai với  X và  Y là: DP = d/2 n

5 Nếu DP>Max thì Max = DP

} // Kết thúc vòng for của  Y

} // Kết thúc vòng for của  X

Thuật toán tính xác suất tuyến tính cực đại:

Với a, b là các mặt nạ đầu vào và đầu ra tương ứng, thì xác suất tuyến tính là:

Xác suất tuyến tính cực đại được tính bằng

Input: song ánh B (bảng tra giá trị của B(x) theo x) Output: Xác suất tuyến tính cực đại q được tính trên B

Max =0; // Khởi tạo xác suất tuyến tính cực đại bằng 0 for a=1 to 2 n -1 do // a dạng thập phân { for b=1 to 2 n -1 do // b dạng thập phân {

2 for x=0 to 2 n -1 do // 2 n khả năng của x

// chuyển a, b,x sang dạng vecto nhị phân

1 n i=b i B i (x)(Lưu ý: tìm B(X) bằng cách tra bảng)

2.3 Nếu a • X = b • B ( X ) thì tăng biến đếm: d = d+1 }

3 Xác suất tuyến tính với mặt nạ a và b là:

4 Nếu LP>Max thì Max = LP

} // Kết thúc vòng lặp của b } // Kết thúc vòng lặp của a

3.7.2 Chương trình tính các xác suất lượng sai và tuyến tính cực đại trên Maple

Thời gian hoàn thành chương trình trong khoảng 15 phút với CPU Core i5-3210M)

3.7.2.1 Chương trình tìm xác xuất lượng sai, tuyến tính cực đại với hộp Sbox của AES

Mã chương trình được thực hiện trên Maple như sau: with(Bits):

#Thiet lap so bit dau ra cho ham Split(n) la 8 bit

The provided code defines a procedure called `nhanbit`, which takes two integer inputs, `a` and `b` It converts these integers into 8-bit binary strings using the `Split` function The procedure then iterates through each bit, performing a bitwise multiplication and XOR operation to compute the final result After processing all bits, it returns the computed value.

#Sbox cua AES dang Hexa sbox16:=["63","7c","77","7b","f2","6b","6f","c5","30","01","67","2b","fe","d7",

"53","d1","00","ed","20","fc","b1","5b","6a","cb","be","39","4a","4c","58","cf",

#Note: Kieu List co chi so bat dau tu 1, sbox[1]="63", sbox[2]="7c", , sbox[256]="16"

This article discusses the conversion of a hexadecimal S-box to decimal format, utilizing a loop to process values from 1 to 256 It highlights the transformation of hexadecimal values into decimal, storing the results in an array The article also outlines a method for calculating maximum error rates and linearity metrics, initializing variables for error tracking and linearity assessment The nested loops iterate through possible input values, applying XOR operations to analyze the S-box's performance in cryptographic applications.

#Dem xac suat luong sai if (tmpluongsai) then demluongsai:luongsai+1; end if:

The article discusses the process of calculating linear probabilities through a series of conditional checks and evaluations It begins by initializing variables for counting linear occurrences and calculating deviations If a specific condition is met, the linear count is incremented The deviation is then evaluated and compared against a maximum threshold, updating it if necessary Additionally, the article outlines how to compute the adjusted linear probability, which is squared and compared to find the maximum value This iterative process continues until all conditions are assessed, ensuring a comprehensive analysis of linear probabilities.

################## printf("\nXac suat luong sai cuc dai: p=%0.9f",maxluongsai); printf("\nXac suat tuyen tinh cuc dai: q=%0.9f",maxtuyentinh);

Kết quả chạy chương trình:

Xác suất lượng sai cực đại p=0.015625 = 2 -6 Xác suất tuyến tính cực đại q=0.015625= 2 -6

3.7.2.2 Chương trình tìm xác xuất lượng sai, tuyến tính cực đại với hộp Sbox1 của Camelia

Mã chương trình chạy trên Maple như sau: with(Bits):

#Thiet lap so bit dau ra cho ham Split(n) la 8 bit

The provided code defines a procedure named `nhanbit` that takes two integer inputs, `a` and `b` It converts these integers into 8-bit binary strings using the `Split` function The procedure then performs a bitwise multiplication for each corresponding bit of the two binary representations, accumulating the results using the XOR operation Finally, it returns the computed result as an integer.

#Sbox cua Camelia dang thap phan sbox10:=[112,130, 44,236,179, 39,192,229,228,133, 87, 53,234, 12,174, 65, 35,239,107,147, 69, 25,165, 33,237, 14, 79, 78, 29,101,146,189,

The Kieu List begins with an index starting from 1, with sbox values ranging from sbox[1] to sbox[256] The algorithm initializes parameters such as n, maxluongsai, maxtuyentinh, dpluongsai, dptuyentinh, dax, and dby It iterates through possible values for dax and dby, counting occurrences of specific conditions within a nested loop For each value of x, it retrieves the corresponding sbox value and performs an XOR operation with dax, followed by another XOR with the result to compute tmpluongsai This process is crucial for analyzing the behavior of the algorithm.

#Dem xac suat luong sai if (tmpluongsai) then demluongsai:luongsai+1; end if:

The article discusses the calculation of linear probability through a series of conditional checks It begins by defining variables for bitwise operations and increments a counter for linear occurrences based on specific conditions The evaluation of the relative error is performed, comparing it against a maximum threshold, which updates if exceeded Additionally, the temporary probability value is computed and squared, with a similar comparison against a maximum probability threshold This process is repeated to ensure accurate tracking of both linear occurrences and probabilities throughout the iterations.

################## printf("\nXac suat luong sai cuc dai: p=%0.9f",maxluongsai); printf("\nXac suat tuyen tinh cuc dai: q=%0.9f",maxtuyentinh);

Kết quả chạy chương trình:

- Xác suất lượng sai cực đại p=0.015625 = 2 -6

- Xác suất tuyến tính cực đại q=0.015625 = 2 -6

1 Hãy cho biết các loại cấu trúc phổ biến của mã khối? Cho ví dụ một số mã khối thuộc các loại cấu trúc đó

2 Trong quá trình thiết kế mã khối, nguyên lý xáo trộn (confusion) và khuếch tán (diffusion) có tầm quan trọng như thế nào?

3 Nêu định nghĩa xác suất tuyến tính và xác suất lượng sai và ý nghĩa của hai đại lượng này

4 Cài đặt thuật toán DES, Camellia trên ngôn ngữ Maple

Chương 4 MẬT MÃ TRÊN ĐƯỜNG CONG ELLIPTIC

Đường cong elliptic không chỉ xuất hiện trong nhiều vấn đề toán học mà còn có ứng dụng quan trọng trong lĩnh vực mật mã Việc áp dụng đường cong elliptic vào mật mã là một ví dụ điển hình cho sự phát triển vượt bậc của toán học trong các ứng dụng thực tiễn.

4.1 ĐỊNH NGHĨA 4.1.1 Định nghĩa đường cong elliptic

Đường cong elliptic phổ biến được biểu diễn qua phương trình y² = x³ + Ax + B, trong đó A và B là các hằng số Đây là phương trình Weierstrass cho đường cong elliptic Để xác định A, B, và x, chúng ta cần chỉ rõ tập hợp mà chúng thuộc về Thông thường, các giá trị này được lấy từ các trường như trường số thực R, trường số phức C, trường số hữu tỷ Q, hoặc một trong các trường Fp (=Z*p) với p là số nguyên tố, hoặc từ một trong các trường hữu hạn.

Fq với q = p k , k≥1 Có thể nói rằng đó là các trường hay gặp nhất trong nghiên cứu mật mã trên đường cong elliptic

Nếu K là một trường và A, B thuộc K, thì E được xác định trên K Từ đây, chúng ta sẽ quy ước rằng E là ký hiệu của đường cong elliptic và K là trường mà E được xác định trên đó.

Khi xét các điểm có tọa độ thuộc một trường L chứa K, ta ký hiệu là E(L), trong đó tập hợp này luôn bao gồm điểm vô cực  Theo định nghĩa, E(L) = {} ∪ {(x,y) ∈ L×L | y² = x³ + Ax + B} Để hiểu rõ hơn về đường cong elliptic, ta cần nghiên cứu sơ bộ trên trường số thực R, với hai dạng cơ bản: Đường cong y² = x³ - x có ba nghiệm thực khác nhau, trong khi đường cong y² = x³ - x chỉ có một nghiệm thực duy nhất Việc xuất hiện nghiệm bội không được phép, do đó ta giả thiết rằng

Nếu đường bậc 3 có các nghiệm r1, r2, r3 thì có thể chứng minh rằng biệt thức của đường cong này là

Các nghiệm của đường cong phải khác nhau, nhưng trường hợp các nghiệm không khác nhau cũng rất thú vị, mặc dù chúng ta không nghiên cứu sâu về nó do thời gian hạn chế Để linh hoạt hơn, người ta cho phép các phương trình tổng quát hơn với dạng \(y^2 + a_1xy + a_3y = x^3 + a_2x^2 + a_4x + a_6\), trong đó \(a_1, \ldots, a_6\) là các hằng số Dạng tổng quát này, còn gọi là phương trình Weierstrass được tổng quát, rất hữu ích khi làm việc với trường đặc số 2 và 3 Nếu đặc số của trường khác 2, có thể chia cho 2 và biến đổi về dạng khác.

Hay có thể viết nó như sau

Nếu đăc trưng đó cũng khác 3 thì ta có thể đặt

1 1 y = x + Ax + B với các hằng số A, B nào đó

Để tối ưu hóa đường cong elliptic, việc thêm một điểm ở vô cùng là rất hữu ích về mặt kỹ thuật Phương pháp đơn giản nhất là coi điểm này như là (∞, ∞) và sử dụng ký hiệu đơn giản hơn để thể hiện nó.

Khi đặt điểm  ở đỉnh của trục y, nó trở thành ký hiệu hình thức tuân theo các quy tắc tính toán cụ thể Ví dụ, một đường thẳng được xem là đi qua điểm  khi nó là trục thẳng đứng, tức là x = hằng số.

Việc đưa các điểm vào cả đỉnh và đáy của trục y có thể không tự nhiên, nhưng lại mang lại nhiều lợi ích Chúng ta nên xem hai đầu của trục y như gặp nhau tại một điểm cụ thể, mặc dù điều này có vẻ lạ Trong trường hợp làm việc với các trường như trường hữu hạn, việc sắp xếp thứ tự các phần tử trở nên vô nghĩa, do đó phân biệt giữa đỉnh và đáy của trục y cũng không còn ý nghĩa Thực tế, trước khi giới thiệu các tọa độ xạ ảnh, các đầu của trục y sẽ không có giá trị thực tiễn.

Ký hiệu hình thức thể hiện những tính chất nhất định, yêu cầu sắp xếp để hai đường thẳng đứng gặp nhau tại điểm  Theo tính đối xứng, nếu chúng gặp nhau ở đỉnh của trục y thì cũng sẽ gặp nhau ở đáy của nó Tuy nhiên, hai đường thẳng chỉ cắt nhau tại một điểm duy nhất, do đó “đỉnh ” và “đáy ” phải là một Điều này thể hiện một tính chất có lợi của .

NHÚNG MỘT SỐ VÀO ĐƯỜNG CONG ELLIPTIC

Đối với mật mã khóa công khai, khi Alice muốn gửi thông điệp cho Bob, cô ấy cần chuyển đổi thông điệp thành một tập hợp các số nguyên và sau đó mã hóa chúng Trong mật mã đường cong elliptic, chúng ta làm việc với các điểm trên đường cong, vì vậy bước đầu tiên là nghiên cứu các phương pháp chuyển đổi bản rõ thành dạng điểm P trên đường cong elliptic Lưu ý rằng ở giai đoạn này, quá trình chuyển đổi không được coi là một phép mã hóa để bảo mật thông tin.

4.2.1 Chuyển thông báo thành số nguyên thuộc F p

Có nhiều phương pháp để chuyển đổi các giá trị thành điểm trên đường cong elliptic Bài viết này sẽ giới thiệu một trong những phương pháp đó, nhằm làm rõ quy trình chuyển đổi này.

Xét việc chuyển đoạn thông báo gồm 3 ký tự thành một phần tử của trường

F31013 cho rằng (m1,m2,m3) là đơn vị thông báo với mi ∈ Z27, trong đó khoảng cách nhận giá trị 0 Để tính giá trị x = m1.27² + m2.27 + m3, x sẽ thuộc Fp nếu p ≥ 26.27² + 26.27 + 26, với giá trị tối đa là 19682 Giả sử p = 41113, thông báo "LETS GET SEAFOOD" cần được chuyển thành các phần tử của Fp bằng cách tách thành những đoạn 3 ký tự.

Bản rõ LET SGE TSE AFO OD_

Cách trực quan nhất để ánh xạ số nguyên x tới điểm P E(Fp) là tìm điểm

P này có hoành độ là x Ví dụ, với đường cong y 2 = x 3 +2x-1 trên F41113 và phải nhứng từ CAT = 3(27) 2 +1.27+20 = 2234 Ta thấy điểm cần tìm là P (2234,23945) E(F41113 ) Từ P, dễ dàng tìm lại CAT

Khoảng một nửa các giá trị x thuộc Fp là hoành độ của các điểm trên đường cong elliptic Ví dụ, giá trị Map = 13.27^2 + 1.27 + 16 = 9520 không phải là thặng dư bậc 2 theo modulo 41113, do đó không có điểm nào trên đường cong có hoành độ là 9520 Tương tự, có khoảng một nửa giá trị x không thỏa mãn điều kiện này.

Khi x không thuộc Q, ta tăng dần x lên mỗi đơn vị cho đến khi đạt được điểm P, với giá trị mới đó làm hoành độ Điểm đầu tiên thỏa mãn tiêu chuẩn này là 9527, dẫn đến MAP ↪(9527, 2121) Nếu chuyển 9527 sang cơ số 27, ta có 9527 = 13.27^2 + 1.27 + 23, từ đó hình thành MAW Do đó, MAP, MAQ, MAR, …, MAW đều liên quan đến (9527, 2121).

Để thực hiện ánh xạ x↪lx với số nguyên lớn l và nhúng lx, ta cần đảm bảo rằng trường vẫn đủ lớn, tức là max{lx} = l.19682 < p, nhằm tìm lại lx duy nhất Điều này cho phép x ánh xạ tới một điểm duy nhất của E(Fp) miễn là một trong các số f(lx), f(lx+1), …, f(lx+l-1) là thặng dư bậc 2 Xác suất không tìm được duy nhất lx với x cho trước là 1/2 l, trong đó số nguyên l được gọi là tham số nhúng.

Trên trường F910307, với đường cong elliptic đã đề cập, có khoảng 1 trên 5000 triệu cơ hội để không có số nào trong các số f(lx), f(lx+1), …, f(lx+31) là thặng dư bậc 2 Nếu muốn nhúng thông điệp "YOU HAVE TWO HOURS" trên đường cong này, bảng minh họa quá trình lặp cho thấy chỉ có duy nhất một điểm đối xứng trong các giá trị rõ x.

Bản rõ YOU HAV ETW OHU ORS

Khi đã biết tham số nhúng l, việc chuyển đổi một điểm trên đường cong elliptic thành số nguyên x trở nên đơn giản Giả sử ta có điểm P (xp, yp) và cần xác định giá trị x Với l đủ lớn, ta có thể giả định rằng xp = lx + m, trong đó 0 ≤ m < l.

Khi đó x p m l = + x l , và theo giả thiết nói trên thì m/l < 1 Vì thế x = x p l

Cần chú ý rằng ta có xác suất (1/2 l ) để bất đẳng thức 0 ≤ m < l là không đúng.

ĐẾM ĐƠN GIẢN SỐ ĐIỂM TRÊN ĐƯỜNG CONG ELLIPTIC

Đếm số điểm trên đường cong elliptic là rất quan trọng để đánh giá và thiết kế an toàn cho đường cong này Trong đoạn này, chúng ta sẽ làm quen với một thuật toán đơn giản để đếm điểm, giúp sinh viên hình dung về quy trình này, mặc dù nó không thể được áp dụng trong thực tế Để nghiên cứu sâu hơn, có thể tham khảo thuật toán Schooof.

Xét phương trình đường cong elliptic trên GF(p), với p > 3, dạng y 2 = x 3 +Ax+B, trong đó A và B là các hằng số thuộc GF(p)

Thuật toán làm việc như sau:

- Cho x lần lượt nhận các giá trị từ 0 đến p-1 Khởi tao bộ đếm count = 0

- Với mỗi giá trị x, tính z = x 3 +Ax+B, kiểm ra xem z có là thặng dư bậc 2 theo modulo p hay không

Nếu z không phải là thặng dư bậc 2 theo modulo p, tăng x lên một đơn vị và quay lại bước trước Ngược lại, nếu z là thặng dư bậc 2 theo modulo p và khác 0, thì thực hiện count = count + 2; nếu z khác 0, thì count = count + 1.

Khi hoàn tất vòng lặp, biến count sẽ đại diện cho số điểm của đường cong elliptic Cuối chương này, chúng tôi sẽ trình bày chương trình trên Maple để đếm và liệt kê các điểm thuộc đường cong elliptic.

TÍNH BẬC CỦA MỘT ĐIỂM

Trong các bài toán mật mã liên quan đến đường cong elliptic, việc xác định điểm P có bậc cao là rất quan trọng Để tính bậc của một điểm, chúng ta cần áp dụng định lý Hasse, liên quan đến số lượng điểm trên đường cong elliptic đã được xác định.

N − q +  q Định nghĩa Cho P  E(Fq) Bậc của P là số nguyên dương nhỏ nhất k sao cho kP = 

Dựa vào định lý Hasse, có thể thử tất cả các gía trị n trong khoảng

  xem có thỏa mãn nP =  không Khi đó mất khoáng 4 q bước

Tuy nhiên, có thể làm giảm xuống còn chừng 4.q 1/4 bước bởi thuật toán sau đây được vận dụng từ thuật toán bước trẻ con- bước khổng lồ

2 Chọn số nguyên m thỏa mãn m > q 1/4 Tính và lưu giữ mảng jP với j 0,1, …, m;

3 Tính các điểm Q+k(2mP) với k = -m, - (m-1), …, (m-1), m cho đến khi có đẳng thức Q+k(2mP) =  jP thì dừng và lấy kết quả là k và j

4 Kết luận (q+1+2mk j)P =  Đặt M = (q+1+2mk j);

5 Phân tích M ra thừa số nguyên tố: M = p1p2…pr;

Nếu (M/pi)P =  với giá trị i nào đó thì thay M bởi M/pi và trở lại bước 5;

Nếu (M/pi)P  với mọi i thì M là bậc của điểm P

7 Nếu cần tính N = E(Fq) thì cứ lặp lại thuật toán trên từ bước 1 đến bước 6 với một số điểm ngẫu nhiên được chọn trên E(Fq) cho đến khi bội số chung nhỏ nhất của bậc các điểm đó là số nguyên N thỏa mãn N

Có 2 điều cần làm rõ trong thuật toán trên Thứ nhất: bước 3 có thành công hay không? Thứ hai: Ở bước 6 đại lượng M có đúng là bậc của điểm P không? Sau đây ta sẽ cho câu trả lời

Bổ đề 1 Cho a là một số nguyên thỏa mãn a ≤ 2m 2 Khi đó tồn tại các số nguyên a0 và a1 với –m ≤ a0< m, –m ≤ a1 ≤ m sao cho a = a0 + 2ma1

Chứng minh Chọn số nguyên b≡ a mod (2m) Thế thì 0 ≤ b < 2m Lấy a0 b-m Khi đó a0 thỏa mãn - m ≤ a0< m Chọn a1 = (a-a0)/(2m) Ta có

Trở lại bước 3 của thuật toán Ta có q  m 2 Đặt a = q+1-N Theo định lý Hasse: a 2 q , hay a ≤ 2m 2 Đặt k = - a1, thế thì

− )P = (q+1-a+a0)P = (N+a0)P = a0P Đặt j = a0, ta thấy bước 3 của thuật toán luôn luôn thành công

Câu hỏi thứ hai được giải đáp bởi bổ đề sau đây

Bổ đề 2 khẳng định rằng, với nhóm G có phần tử trung hòa 0 và g thuộc G, nếu Mg = 0 với một số nguyên dương M, thì các số nguyên tố p1, …, pr là tất cả các số nguyên tố khác nhau trong phân tích của M Nếu (M/pi)g khác 0 cho mọi i, điều này cho thấy M là bậc của g.

Chứng minh rằng k là bậc của g và k là ước của M Giả sử k khác M, chọn pi là số nguyên tố chia hết cho M/k Khi đó, pi^k là ước của M, dẫn đến k là ước của M/pi Điều này tạo ra mâu thuẫn khi (M/pi)^g = 0, phản bác giả thiết trong bổ đề Do đó, kết luận rằng k phải bằng M Như vậy, ở bước 6, chúng ta đã xác định được bậc của P.

Ví dụ Cho E là đường cong elliptic trên F557 Cho P = (2,3) Các bước thực hiên thuật toán trên như sau

2 Chon m = 5 vì 5 > 557 1/4 Mảng jP là

3 Khi k = 3 ta có Q+k(2mP) = (2,3), nó gặp điểm trong mảng trên với j 1

5 Phân tích 567 = 3 4 7 Tính (567/3)P = 189P =  Vậy 189 là ứng cử viên cho bậc của P

6 Phân tích 189 = 3 3 7 Tính (189/3)P = 63P = (38,535)  và (189/7)P (136,360)  Vậy 189 là bậc của P

7 Theo định lý Hasse: 511 ≤ N557 ≤ 605 Bội duy nhất của 189 trong miền này là 3.189 = 567 Do đó N557 = 567.

MỘT SỐ HỆ MẬT, HỆ CHỮ KÝ SỐ TRÊN ĐƯỜNG CONG

4.5.1 Bài toán lô ga rít rời rạc (DLP) trên đường cong elliptic Định nghĩa : Giả sử G là một nhóm cyclic hữu hạn có cấp n Gọi  là phần tử sinh của G và  là một phần tử cũng thuộc G Khi đó Lô-ga-rít rời rạc của

Theo định nghĩa, logαβ là số nguyên duy nhất x trong khoảng 0 ≤ x ≤ n - 1 sao cho β = α^x Trong các cấu trúc nhóm cyclic, nếu biết α và x, việc tính β = α^x là dễ dàng và có thể thực hiện trong thời gian đa thức Tuy nhiên, nếu chỉ biết α và β mà cần tính x, thì đây là một bài toán khó, thường được giải trong thời gian hàm mũ Độ khó của bài toán lô-ga-rít còn phụ thuộc vào cấu trúc đại số mà nó được xác định.

Giả sử P là một điểm có bậc hữu hạn trên đường cong elliptic, khi đó tập

Trong toán học, với kP: k ∈ Z, phép công điểm tạo thành một nhóm cyclic với P là phần tử sinh Đặc biệt, nếu số điểm trên đường cong elliptic là một số nguyên tố N, thì mọi điểm P trên đường cong này đều là phần tử sinh, tức là P có bậc N.

Bài toán lô-ga-rít rời rạc trên đường cong Elliptic (ECDLP) liên quan đến việc xác định số nguyên k trong khoảng từ 0 đến n-1, sao cho Q = kP, với E là một đường cong Elliptic xác định trên trường hữu hạn GF(q), P là điểm có bậc n, và Q là một điểm thuộc E.

Còn hai bài toán liên quan nữa là bài toán Diffie-Hellman Elliptic ( ECDHP) và bài toán quyết định Diffie-Hellman Elliptic (ECDDHP)

Bài toán ECDHP: Cho trước các điểm P, aP và bP của E trên GF(q) Hãy tính abP

Bài toán ECDDHP yêu cầu xác định xem điểm Q có phải là abP trong không gian elliptic E trên GF(q), với các thông tin đã cho là P, aP và bP Nếu bài toán ECDLP có thể giải được, thì bài toán này cũng có thể được giải quyết.

Bài toán lô-ga-rít rời rạc trên đường cong Elliptic (ECDLP) trong trường hữu hạn GF(q) là nền tảng cho các thuật toán mật mã an toàn nhất hiện nay Đến nay, chưa có thuật toán nào có thể tấn công bài toán này với thời gian tiểu hàm mũ, điều này chứng tỏ tính bảo mật cao của nó.

4.5.2 Các hệ mật đường cong Elliptic:

Để sử dụng các thuật toán mật mã Elliptic, bước đầu tiên là ánh xạ thông báo lên tọa độ các điểm trên đường cong Elliptic, vì các thuật toán này chỉ hoạt động với các điểm và tọa độ tương ứng của chúng Nội dung này đã được trình bày trong mục 4.2.

Trong quá trình liên lạc, các bên công bố trường số GF(q) và đường cong Elliptic E được xác định trên GF(q), đảm bảo rằng bài toán ECDLP khó giải trên GF(q) Alice chọn một số bí mật a và công bố điểm aP thuộc E, trong khi Bob chọn một số bí mật b và công bố điểm bP thuộc E.

Để gửi thông báo M đến Alice, Bob chọn ngẫu nhiên một số nguyên dương k và nhận điểm aP do Alice công bố Sau đó, Bob tính toán kP và k(aP), rồi gửi cho Alice hai giá trị: kP và M + k(aP).

Alice có a và nhận được kP nên có thể tính a(kP) = k(aP) rồi sau đó tính M (M+k(aP)) – k(aP) Độ an toàn :

Rõ ràng muốn tính được M thì Malice phải hoặc tính được k hoặc a Do đó Malice phải đối mặt với bài toán ECDLP đối với kP và aP

1 Alice và Bob thỏa thuận về đường cong Elliptic E trên trường hữu hạn GF(q) (sao cho bài toán ECDLP là khó trên GF(q)) và N là số điểm của E trên

2 Alice biểu diễn thông báo của mình là điểm M  E

3 Alice chọn số nguyên bí mật mA với điều kiện (mA,N) = 1 và tính M1 mAM và gửi M1 cho Bob

4 Bob chọn số nguyên bí mật mB với điều kiện (mB,N) = 1 và tính M2

=mBM1 và gửi M2 cho Alice

5 Alice tính mA -1 ZN và tính M3 = mA -1M2 và gửi M3 cho Bob

6 Bob tính mB -1 ZN và M4 = mB -1M3 Khi đó M4 = M chính là thông báo Bob cần nhận được

4.5.2.3 Hệ mật trên đường cong elliptic Menezes- Vanstone :

Cho E là đường cong elliptic xác định trên Zp (p là số nguyên tố > 3) sao cho

E chứa nhóm con cyclic H mà trong đó bài toán logarit rời rạc là khó giải

Cho P=Zp * x Zp * , C=E x Zp * x Zp * và xác định K={(E, ,a ,): =a} trong đó E Các giá trị , là công khai, a là bí mật

Cho k=(E, ,a ,), với số ngẫu nhiên (bí mật) rZ|H | và với x=(x1,x2)  Zp * x

Ek(x,r)=(y0,y1,yy2); trong đó y0= r; (c1,c2) = r; y1=c1x1 mod p; y2=c2x2 mod p

Với bản mã y=(y0,y1,y2) xác định dk(y)=(y1c1 -1 mod p, y2c2 -1 mod p) trong đó ay0=(c1,c2)

Trở lại đường cong y² = x³ + x + 6 trên Z11, hệ mật Menezes-Vanstone cho phép tạo ra 100 bản rõ trong khi hệ mật gốc chỉ cho phép 13 bản rõ Bài viết này sẽ minh họa quy trình mã hóa và giải mã.

Như ví dụ trên, y 2 = x 3 +x+6 trên Z11 Giả sử Giả sử =(2,7) và "số mũ" bí mật của Bob là a=7, do đó  = 7 = 7(7,2)

Giả sử Alice muốn mã bản rõ x=(x1,x2)=(9,1) (xE), cô ta chọn giá trị ngẫu nhiên r = 6 Trước hết cô tính y0 = r = 6(2,7) = (7,9) và r=6(7,2)=(8,3) do đó c1=8 và c2=3

Sau đó cô ta tính y1=c1x1 mod p=8.9 mod 11=6 y2=c2x2 mod p=3.1 mod 11=3 Bản mã Alice gửi cho Bob là y =(y0,y1,y2)=((7,9),6,3) Khi bob nhận được y, trước hết anh ta tính

(c1,c2) = ay0 = 7(7,9) = (8,3) và sau đó x= (y1c1 -1 mod p, y2c2 -1 mod p) x = (6.8 -1 mod 11, 3.3 -1 mod 11) x = (6.7 mod 11, 1 mod11) x = (9,1) Như vậy phép giải mã cho bản rõ đúng

4.5.3 Các hệ chữ ký trên đường cong Elliptic:

4.5.3.1 Sơ đồ chữ ký số Elgamal Elliptic:

Alice chọn đường cong Elliptic E trên trường hữu hạn GF(q) sao cho bài toán ECDLP là khó trên E Alice chọn điểm A  E (thường thì bậc N của điểm

A là một số nguyên tố lớn), số nguyên bí mật a và tính B = aA Alice cũng chọn hàm : f : E → Z

Hàm f không yêu cầu tính chất đặc biệt nào, chỉ cần ảnh của nó lớn và chỉ có một số nhỏ đầu vào tạo ra đầu ra cụ thể Chẳng hạn, khi xem xét E trên GF(p) với p là số nguyên tố, ta có thể định nghĩa f(x,y) = x.

Thông tin công khai của Alice là E, GF(q), f, A và B Alice giữ a bí mật Số nguyên dương N cũng không nên được công bố công khai

Alice tạo chữ ký số:

1 Alice biểu diễn thông báo là số nguyên m Nếu m > N thì chọn đường cong lớn hoặc sử dụng hàm băm cho m

2 Alice chọn số nguyên dương ngẫu nhiên k với (k,N) = 1 và tính R = kA

3 Alice tính s  k -1 (m - af(R)) (mod N) và thông báo cùng chữ ký là (m, R, s)

Kiểm tra chữ ký số:

1 Bob lấy thông tin công khai của Alice

2 Bob tính V1 = f(R)B + sR và V2 = mA

3 Nếu V1 = V2 thì Bob tin tưởng chữ ký là hợp lệ

Chúng ta có sk  m - af(R) (mod N) và do đó sk = m - af(R) + zN đối với một số nguyên z nào đó Bởi vậy skA = (m - af(R))A + zNA = (m - af(R))A + O

= (m - af(R))A Thế thì V1 = f(R)B + sR = f(R)aA + skA = f(R)aA + (m - af(R))

4.5.3.2 Chuẩn chữ ký số Elliptic (ECDSA):

Alice muốn ký thông báo m là một số nguyên dương bằng cách chọn đường cong Elliptic E trên trường hữu hạn GF(q), với số điểm của E trên GF(q) là fr, trong đó r là số nguyên tố lớn và f là số nguyên dương nhỏ để đảm bảo thuật toán hiệu quả Cô chọn điểm cơ sở G của E trên GF(q) có bậc r và sau đó chọn số nguyên dương a để tính Q = aG.

Alice công bố công khai thông tin sau đây: GF(q), E, r, G, Q

Alice tạo chữ ký số:

1 Alice chọn số nguyên dương ngẫu nhiên k với 1  k < r và tính R = kG

2 Alice tính s = k -1 (m + ax) (mod r) và tài liệu ký là (m, R, s)

Bob kiểm tra chữ ký số:

1 Bob tính u1 = s -1 m (mod r) và u2 =s -1 x (mod r)

3 Bob tuyên bố chữ ký số hợp lệ nếu V = R

Nếu thông báo được ký đúng thì đẳng thức kiểm tra đúng:

V = u1G + u2Q = s -1 mG + s -1 xQ = s -1 (mG + xaG) kG = R

Sự khác biệt chính giữa ECDSA và sơ đồ chữ ký số Elgamal Elliptic nằm ở quy trình kiểm tra chữ ký Trong khi sơ đồ Elgamal yêu cầu ba phép tính phức tạp, bao gồm f(R)B + sR mA, ECDSA chỉ cần hai phép tính Cải tiến này giúp ECDSA trở nên hiệu quả hơn, đặc biệt khi cần thực hiện nhiều lần kiểm tra chữ ký, mang lại giá trị thực tiễn cao.

4.5.4 Giao thức trao đổi khóa

Trường hữu hạn GF(q) và đường cong Elliptic E được xác định trên trường này đã được công bố công khai Điểm P thuộc E cũng đã được công bố, tuy nhiên P không nhất thiết phải là phần tử sinh của E mà chỉ cần có bậc lớn.

1 Alice chọn số nguyên dương a có độ lớn cùng cỡ với q và công bố công khai điểm aP  E

2 Bob chọn số nguyên dương b tương tự với cách làm của Alice và công bố công khai điểm bP E

3 Alice tính Ka = a(bP) = abP, Bob tính Kb = b(aP) = abP  E và sử dụng K

= Ka = Kb như là khóa phiên chung với nhau Độ an toàn :

Để Malice tính giá trị K khi đã biết P, aP và bP, anh ta cần xác định giá trị a từ aP hoặc giá trị b từ bP Việc này tương đương với việc giải bài toán lô-ga-rít rời rạc trong không gian Elliptic.

CHỌN ĐƯỜNG CONG TỐT

Đường cong tốt là những đường cong đáp ứng một số yêu cầu về thực hiện, độ an toàn lý thuyết và khả năng kháng lại các tấn công đã biết Các cơ quan quốc tế quan tâm đến vấn đề này không chỉ về mặt quy định mà còn về phương pháp luận trong việc đề cập và giải quyết vấn đề.

4.6.1 Những yêu cầu kỹ thuật

Người ta có những yếu cầu kỹ thuật sau đây đối với các đường cong elliptic khi đưa vào sử dụng

1 Đối với độ dài của modu lo của đường cong tính theo bít: cần chọn trong miền 160, 192, 224, 256, 320, 384, 512 chúng cho phép các đường cong cung cấp các mức độ an toàn thích hợp với các thuật toán đối xứng cơ sở Hầu hết các đề nghị trước đây yêu cầu đường cong 521 bít thay vì 512 bít

2 Số nguyên tố p ≡ 3 mod 4 Yếu cầu này cho phép nén điểm có hiệu quả: một phương pháp để truyền các điểm của đường cong P = (x,y) là chỉ phải truyền x và bít có ý nghĩa thấp nhất LSB(y) của y Người nhận sử dụng phương trình đường cong để tính căn bậc hai của z = x 3 +Ax+B một cách hiệu quả khi p ≡ 3 mod 4 (kết quả là y), sau đó nhở bít LSB(y) để xác định y hoặc –y

3 Đường cong phải đáp ứng tất cả các yêu cầu an toàn được nêu trong mục 4.6.2

4 Số nguyên tố p phải không có dạng đặc biệt để tránh các phép toán số học nhanh trên trường cơ sở

5 #E(GF(p)) < p để tránh qua tải khi thực hiện

6 B sẽ phải không thặng dư bậc hai theo modulo p Nếu ngược lại, việc biểu diễn nén của các điểm (0,0) và (0,X) (với X là căn bậc hai của B) sẽ có bít có ý nghĩa thấp nhất là 0, do đó chúng sẽ đồng nhất Yêu cầu này nhằm tránh sự nhập nhằng

7 Tất cả các đường cong phải có nhận dạng đối tượng để làm thuận lợi cho việc thực hiên

8 Dữ liệu đường cong cũng phải được cho theo cú pháp ANSI.1 để làm thuận lợi cho việc thực hiên

4.6.2 Những yêu cầu an toàn

Những yêu cầu này bắt nguồn từ các tấn công mật mã-toán học và nhằm nâng cao độ tin cậy đối với các đường cong

1 Triệt tiêu các tấn công sử dụng các Weil –Tatepairing Những tấn công này cho phép nhúng nhóm con cyclic của E vào nhóm các đơn vị của mở rộng bậc l GF(p l ) của GF(p), ở đó tấn công tiểu hàm mũ lên DLP tồn tại Yêu cầu của chúng ta là (q-1)/l< 100, nghĩa là l gần với giá trị cực đại có thể

Chú ý Yêu cầu này trên GF(p) loại trừ các đường cong siêu kỳ dị, vì chúng là những đường cong bậc p+1 và p+1 chia hết p 2 -1

2 Đường cong không là dị thường Đường cong dị thường là những đường cong với #E(GF(p)) = p Chú ý rằng những đường cong này cũng bị loại trừ bởi yêu cầu 5 của mục 4.6.1

3 Số lớp có bậc cực đại của vành tự đồng cấu của E lớn hơn 10 000 000 Điều kiện này loại trừ những đường cong được sinh bởi phương pháp CM nổi tiếng

4 Bậc của nhóm #E(GF(p)) là số nguyên tố q để chống lại các tấn công nhóm con nhỏ

5 Tính giả ngẫu nhiên khi sinh đường cong cần phải kiểm tra

6 Chứng minh độ an toàn Đối với tất cả các đường cong, cần chứng minh rằng tất cả các yêu cầu an toàn đã được đáp ứng

Chú ý Các yêu cầu an toàn luôn được cập nhật, nên người ứng dụng cần thường xuyên tham khảo Có thể xem những cập nhật của NIST.

MỘT SỐ CHƯƠNG TRÌNH MAPLE VỀ ĐƯỜNG CONG ELLIPTIC

Trong bài viết này, chúng ta sẽ khám phá một số chương trình cơ bản liên quan đến mật mã trên đường cong elliptic Những chương trình này được thiết kế để khuyến khích sinh viên học tập và nghiên cứu sâu hơn, thay vì chỉ đơn thuần là một thư viện tra cứu.

Trong Maple, điểm vô cực được quy ước là [-1,-1] Để đảm bảo các tọa độ của các điểm khác luôn là số không âm, chúng sẽ được rút gọn theo modulo sau mỗi bước tính toán.

Theo định nghĩa, kP = P+….+ P (k lần) Tuy nhiên, tính kP theo định nghĩa này sẽ rất chậm, nên người ta đưa ra cách tính sau đây

4.7.2 Liệt kê các điểm của đường cong

Trong chương trình liệt kê và đếm điểm, phần tính căn bậc hai chỉ áp dụng cho các số nguyên tố p có dạng p≡3 mod 4, trong khi các số p có dạng khác được coi là bài tập.

4.7.3 Hệ mật trên đường cong elliptic

4.7.4 Hệ chữ ký trên đường cong elliptic

4.7.4.1 Sơ đồ chữ ký số Elgamal Elliptic:

4.7.4.2 Sơ đồ chữ ký số ECDSA:

CÂU HỎI ÔN TẬP

1 Từ các công thức hiển “cộng” các điểm trên đường cong Elliptic hãy chuyển thành các công thức “trừ” các điểm trên đường cong Elliptic ?

2 Cho đường cong elliptic trên GF(997) là y 2 = x 3 +5x+993 Hãy nhúng thông báo m = 823 lên đường cong này

3 Hãy đếm số điểm trên đường cong nói trên

4 Cho P=[113, 376] Chứng minh rằng P thuộc đường cong elliptic y 2 = x 3 +5x+993 trên GF(997) Hãy tính bậc của P

5 Hãy chọn trường cơ bản dạng GF(p) và một đường cong elliptic tương ứng (khác với những ví dụ nêu trong giáo trình) Sau đó thực hiện một hệ mật trên đường cong elliptic đó trên ngôn ngữ Maple

6 Một yêu cầu tương tự với bài tập 5 nhưng thực hiện với một lược đồ chữ ký số

7 Hãy phân tích các yêu cầu kỹ thuật và các yêu cầu an toàn

8 Các yêu cầu kỹ thuật và các yêu cầu an toàn giống và khác nhau như thế nào? Chúng nhằm mục đích gì?

GIAO THỨC MẬT MÃ

ĐỊNH NGHĨA

Thuật toán mật mã là một phương pháp biến đổi xác định, tạo ra giá trị đầu ra từ giá trị đầu vào, đồng thời đảm bảo đạt được các mục tiêu an toàn cần thiết.

Giao thức mật mã là một thuật toán phân tán, mô tả chi tiết cách thức tương tác giữa hai hoặc nhiều bên, nhằm đạt được các mục tiêu an toàn nhất định.

Lược đồ mật mã là một bộ các thuật toán mật mã và/hoặc các giao thức mật mã nhằm đạt được những mục tiêu an toàn nhất định

Trong giao thức mật mã, các thực thể tương tác thông qua việc trao đổi thông báo trên các kênh liên lạc riêng, bao gồm kênh điểm-điểm và kênh quảng bá Các kênh này thường được giả định có những bảo đảm an toàn riêng, như kênh riêng tư sử dụng mã hóa để bảo vệ chống nghe trộm và xác thực để ngăn chặn giả mạo Ngược lại, kênh công cộng không có bảo vệ nào chống lại nghe trộm Một ví dụ khác là bảng tin, là kênh quảng bá công cộng có xác thực, cho phép người gửi truyền đạt thông báo đã được xác thực.

Mô hình liên lạc xác định các kênh có thể có giữa các cặp hoặc tập thực thể, đồng thời ẩn giấu các chi tiết thực hiện của những kênh này, cho thấy rằng chúng có thể khác biệt so với những gì thông thường và có thể đòi hỏi chi phí cao.

Các giao thức mật mã có mối liên hệ chặt chẽ với các cuộc tấn công từ đối phương, vì vậy cần xác định rõ các thuật ngữ liên quan Đối phương được hiểu là sự kết nối giữa kẻ tấn công và một hoặc nhiều thực thể tham gia vào lược đồ mật mã.

Các thực thể do đối phương điều khiển được gọi là bị mua chuộc, trong khi những thực thể khác được xem là trung thực Kẻ tấn công được coi là người ngoài cuộc, trong khi thực thể bị mua chuộc giống như người trong cuộc Điều quan trọng là kẻ tấn công và thực thể bị mua chuộc có thể phối hợp nỗ lực của họ.

Tấn công bị động là hình thức tấn công mà đối phương không can thiệp vào các thuật toán và giao thức trong lược đồ mật mã Trong loại tấn công này, kẻ tấn công chỉ lén lút nghe trộm và ghi lại thông tin giữa các thực thể, bao gồm cả dữ liệu nhạy cảm của các đối tượng bị theo dõi.

Tấn công chủ động cho phép đối phương can thiệp vào lược đồ mật mã bằng cách xóa, chèn hoặc sửa đổi các thông báo, khiến cho nạn nhân bị động Ngoài ra, kẻ tấn công có thể sử dụng các thực thể bị mua chuộc để thay đổi hành vi của chúng theo cách tùy ý, làm gia tăng nguy cơ cho hệ thống bảo mật.

Kẻ tấn công bị động thực hiện việc nghe trộm trong lược đồ mật mã, trong khi tấn công người-ở-giữa là một ví dụ điển hình của tấn công tích cực vào giao thức trao đổi khóa.

Giao thức mật mã thường kết hợp với nhiều lĩnh vực quan trọng như thỏa thuận khóa, xác thực thực thể, mã hóa đối xứng, xây dựng tư liệu xác thực thông báo, vận tải dữ liệu ở mức ứng dụng, các phương pháp chống chối bỏ và nặc danh.

Ví dụ, giao thức Diffie-Hellman là thỏa thuân khóa trong đó có sử dụng mật mã khóa công khai

TLS là giao thức mật mã dùng để bảo mật kết nối trang web (HTTP) với cơ chế xác thực dựa trên hệ thống X.509 Trong quá trình thiết lập, khóa mã hóa đối xứng được tạo ra thông qua mật mã khóa công khai Ba lĩnh vực này có mối quan hệ chặt chẽ và quan trọng, tuy nhiên, chuẩn TLS không hỗ trợ chức năng chống chối bỏ.

Xác thực Xác thựclà một thủ tục mà qua nó thực thể này thiết lập một tính chất được yêu cầu cho thực thể khác

Server yêu cầu client cung cấp mật khẩu Khi client cung cấp mật khẩu đúng, điều này chứng tỏ rằng client là thực thể tin cậy đối với server.

Giao thức xác thực là giao thức mật mã gắn đồng thời với yêu cầu xác thực Đây là loại giao thức được quan tâm rất rộng rãi

Hầu hết các giao thức hiện có đều chưa hoàn thiện, điều này chứng tỏ rằng việc thiết kế giao thức an toàn là một thách thức lớn Ngoài ra, nó cũng tạo ra nhu cầu nghiên cứu liên tục cho các chuyên gia trong lĩnh vực ứng dụng và phát triển các giao thức mật mã.

CÁC YÊU CẦU TRONG GIAO THỨC XÁC THỰC

Trong quá trình liên lạc, có ba yếu tố chính cần được xác thực: thực thể liên lạc, thông điệp cần trao đổi và khóa mã hóa để bảo vệ thông điệp.

Đối với ba đối tượng cần xác thực, yêu cầu quan trọng là thông báo phải có tính tươi mới và thực thể phải thể hiện tính sống động Chúng ta sẽ khám phá hai thuộc tính này để hiểu rõ hơn về sự cần thiết của chúng trong quá trình xác thực.

5.2.1 Tính tươi của thông báo và tính sống của thực thể :

5.2.1.1 Tính tươi của thông báo

Thông báo được coi là đủ hiện thời nếu thời gian giữa việc phát và thu là ngắn, và được gọi là thông báo tươi Tính tươi của thông báo phản ánh sự phù hợp về thời gian của nội dung công việc giữa các thực thể trao đổi Điều này cũng ngụ ý rằng trong quá trình liên lạc, các thực thể, máy móc, hệ thống hoặc thông báo không bị phá hoại Việc xác định tính tươi của thông báo phụ thuộc vào các ứng dụng cụ thể.

Một số ứng dụng yêu cầu thời gian ngắn để thông báo được cập nhật, thường chỉ trong vài giây Điều này đặc biệt quan trọng trong các giao thức thách đố-giải đố dựa trên ứng dụng liên lạc an toàn thời gian thực.

Một số ứng dụng hiện nay cho phép kéo dài chu kỳ tươi, điển hình như trong đại chiến thế giới thứ hai, máy mã Enigma của Đức yêu cầu thay đổi “khoá ngày” hàng ngày Nguyên tắc này đã trở thành cơ sở cho việc quản lý khoá trong nhiều hệ thống an toàn hiện đại, mặc dù “Khoá ngày” đã được thay thế bằng “Khoá giờ” hoặc “Khoá phút”.

Nhiều ứng dụng hiện nay cho phép thời gian hiệu lực của thông báo kéo dài hơn, với ví dụ điển hình là hầu hết các ngân hàng chấp nhận thời gian hợp lệ cho séc lên đến ba tháng.

5.2.1.2 Tính sống của thực thể

Trong một số tình huống xác thực, thực thể cần xác định sự tồn tại của bên liên lạc, tức là liệu người mà họ đang giao tiếp có còn "sống" hay không.

Trong giao thức, mỗi thực thể được xác định bởi một định danh và mật khẩu duy nhất Nếu định danh và mật khẩu của thực thể khớp với thông tin mà nó cung cấp cho thực thể khác, tính xác thực của thực thể sẽ được xác nhận Ngược lại, nếu thông tin không khớp, thực thể đó sẽ không còn được tin cậy.

Thông báo có tươi hay không đóng vai trò quan trọng trong việc xác thực nguồn gốc dữ liệu và xác thực thực thể Điều này đặc biệt cần thiết khi thực thể cần đảm bảo sự tương ứng sống của bên liên lạc Do đó, các cơ chế thiết lập tính tươi của thông báo và tính sống của thực thể là những thành phần cơ bản trong các giao thức xác thực.

5.2.2 Xác thực nguồn gốc dữ liệu

Xác thực nguồn gốc dữ liệu cũng còn được gọi là xác thực thông báo, nó liên quan gần với nguyên vẹn dữ liệu

Trong lĩnh vực mật mã và an toàn thông tin, hai khái niệm này thường được coi là tương đồng, không có sự khác biệt rõ rệt Quan điểm này xuất phát từ việc cho rằng việc sử dụng thông tin bị sửa đổi một cách độc hại có mức độ rủi ro tương tự như việc sử dụng thông tin không rõ nguồn gốc.

Tuy nhiên, xác thực nguồn gốc dữ liệu và nguyên vẹn dữ liệu là hai khái niệm khác biệt Chúng có thể được phân biệt rõ ràng qua một số khía cạnh cụ thể.

Xác thực nguồn gốc dữ liệu trong liên lạc là dịch vụ an toàn giúp thực thể nhận thông báo kiểm tra tính xác thực của nguồn gửi Dịch vụ này đảm bảo rằng thông báo đến từ nguồn được yêu cầu và không phụ thuộc vào đặc tính liên lạc, có thể được áp dụng trực tiếp trên dữ liệu đã được lưu trữ.

Xác thực nguồn gốc dữ liệu là quá trình nhận diện nguồn gốc của thông tin, điều này rất quan trọng để đảm bảo tính chính xác và độ tin cậy của dữ liệu Trong khi đó, việc giữ nguyên vẹn dữ liệu không yêu cầu phải xác định nguồn gốc.

Xác thực nguồn gốc dữ liệu là yếu tố quan trọng, bao gồm việc xác định tính tươi của thông báo Trong khi đó, tính nguyên vẹn của dữ liệu không yêu cầu phải xác minh điều này, vì một thông báo cũ vẫn có thể giữ nguyên tính nguyên vẹn hoàn hảo.

Cuối cùng, một sự xác nhận nặc danh từ các sơ đồ mật mã như chữ ký mù có thể tạo ra sự phân biệt rõ ràng giữa xác thực nguồn gốc dữ liệu và đảm bảo nguyên vẹn dữ liệu.

MỘT SỐ GIAO THỨC: THUẬT TOÁN VÀ ĐỘ AN TOÀN

Chúng tôi trình bày một tập quy ước ý nghĩa ngữ nghĩa cho một số thông báo giao thức, cùng với cấu trúc cú pháp tương ứng của chúng Tập quy ước này sẽ giúp hiểu rõ hơn về cách thức hoạt động và giao tiếp trong các giao thức.

• Alice, Bob, Trent, Malice, : Là những tên thực thể Chúng xuất hiện như là những thông báo giao thức và có thể được viết tắt là A, B, T,

• Alice → Bob : M : Alice gửi đến Bob một thông báo M

• MK : Bản mã của thông báo M nhờ khoá K

K, KAB, KAT, KA là các loại khoá mật mã, trong đó KXY biểu thị khoá được chia sẻ giữa hai thực thể X và Y, trong khi KX đại diện cho khoá công khai của thực thể X.

N, NA, là những số khắc, có nghĩa là “số sử dụng một lần” Những số này được tạo ra ngẫu nhiên từ một không gian đủ lớn và NX được sinh ra bởi thực thể X.

• TX : Tem thời gian được tạo ra bởi thực thể X

• sigA(M) : Chữ ký số của thực thể A trên thông báo M

Thông báo MNB được mã hóa bằng khóa KAB Chúng ta cần thiết lập thêm một số quy ước về hành vi của các thực thể tham gia giao thức, bất kể chúng có hợp pháp hay là khách không mời.

Trong giao thức, thực thể thật thà không thể hiểu được ý nghĩa ngữ nghĩa của bất kỳ thông báo nào cho đến khi quá trình thực hiện giao thức hoàn tất thành công.

• Thực thể thật thà trong giao thức không thể nhận ra MK hoặc tạo ra nó hoặc phân huỷ nó trừ khi thực thể đó có trong tay khoá đúng

Trong giao thức, thực thể trung thực không thể nhận diện các số có vẻ ngẫu nhiên, chẳng hạn như số khắc, số tuần tự hay khóa mật mã, trừ khi chúng được tạo ra bởi thực thể trong quá trình thực hiện giao thức hoặc là kết quả đầu ra từ lần thực hiện giao thức đó.

Trong giao thức, thực thể thật thà không ghi lại bất kỳ thông báo nào trừ khi được chỉ định trong đặc tả giao thức Thông thường, giao thức thông báo không trạng thái, nghĩa là không yêu cầu thực thể duy trì thông tin trạng thái sau khi kết thúc vận hành giao thức, ngoại trừ thông tin đầu ra của giao thức đến thực thể.

• Malice biết “những sự dốt nát” (công bằng mà nói thì là những cái yếu) của những thực thể thật thà và sẽ luôn khai thác chúng

Các giao thức xác thực được thiết kế để truyền thông báo trong mạng liên lạc công khai phải đối mặt với sự kiểm soát của Malice, với mục tiêu ngăn chặn các cuộc tấn công từ thực thể này Những giao thức này hoạt động hiệu quả trong môi trường mà Malice có thể là một thực thể “Thông minh” hoặc “Dốt nát”.

5.3.2 Những kỹ thuật xác thực cơ bản

Có nhiều kỹ thuật để thực hiện xác thực và thiết lập khoá an toàn, nhưng các thiết kế giao thức cơ bản, đặc biệt là những thiết kế tốt, thường có sự thống nhất Thay vì trình bày các giao thức cụ thể, chúng ta sẽ tìm hiểu các kỹ thuật xác thực cơ bản dưới dạng các cơ chế.

5.3.2.1 Những cơ chế thách đố-giải đố

Trong cơ chế thách đố-giải đố, Bob đóng vai trò là người kiểm tra, tạo ra đầu vào cho quá trình hình thành thông báo giao thức liên quan đến biến đổi mật mã của Alice Điều này cho phép Bob xác minh sự tương ứng sống của Alice thông qua tính tươi của đầu vào mà chính anh ta đã tạo ra Đầu vào thông thường mà Bob sử dụng là số ngẫu nhiên, hay còn gọi là số khắc, mà Bob sinh ra và truyền cho Alice.

NB ký hiệu số khắc sinh ra bởi Bob Cơ chế làm tươi thông báo này có khuôn dạng tương tác sau đây :

3 Bob giải mã khúc mã và

 lại ng-ợc hợp tr-êng trong chèi Tõ

N thÊy ta anh nÕu thuËn

Trong giao tiếp giữa Bob và Alice, thông báo đầu tiên mà Bob gửi được gọi là thách đố, trong khi thông báo thứ hai từ Alice được xem là giải đố Bob đóng vai trò là người khởi xướng, còn Alice là người phản hồi.

Cơ chế này áp dụng kỹ thuật mật mã đối xứng, trong đó Bob cần giải mã khúc bản mã nhận được từ Alice bằng cách sử dụng khoá chia sẻ KAB Nếu kết quả giải mã đúng với số khắc của Bob, điều này cho thấy Alice đã thực hiện biến đổi mật mã theo yêu cầu trước khi gửi thách đố Hơn nữa, nếu thời gian giữa việc gửi thách đố và giải mã là ngắn, thông báo M sẽ được coi là tươi thực sự.

Cơ chế làm tươi thông báo dựa trên niềm tin rằng việc biến đổi mật mã của Alice chỉ diễn ra sau khi cô nhận được số khắc ngẫu nhiên từ Bob Số khắc này được chọn từ một không gian lớn, đảm bảo rằng không ai có thể đoán trước giá trị của nó trước khi Bob gửi đi.

Nếu thuật toán lập mã trong cơ chế xác thực không đảm bảo tính toàn vẹn của dữ liệu, Bob sẽ không thể xác định tính tươi của thông báo M.

ISO và IEC đã chuẩn hóa cơ chế thách đố-giải đố hiện tại cho các cơ chế xác thực thực thể đơn phương Sự chuẩn hóa này được gọi là “giao thức xác thực đơn phương hai bước.”

A → B : TokenAB với TokenAB = Text3||  K AB (R B ||B||Text2)

MỘT SỐ CHƯƠNG TRÌNH MAPLE

Một số chương trình Maple nêu ra ở đây không nhằm minh họa cho từng giao thức nói ở phần trên Chúng nhằm giúp sinh viên hiểu rằng việc sử dụng

Maple thể hiện giao thức sẽ khiến họ hiểu sâu sắc giao thức đó và hiểu được việc thực hành chúng trên một ngôn ngữ lập trình

5.4.1 Cơ chế thách đố-giải đố được chuẩn hóa

Sau khi nhận được TokenAB, Bob cắt bỏ text3 rồi giải mã V2:

Bob chấp nhận chuyến đi đó vì sự giải mã cho ra số khắc RB đúng là của anh ta

5.4.2 Cơ chế tem thời gian được chuẩn hóa

A và B thiết lập khóa chung KAB:

B kiểm tra tính hợp lệ

CÂU HỎI ÔN TẬP

1 Phân biệt sự khác nhau giữa các dịch vụ an toàn sau đây: Tính nguyên vẹn dữ liệu, xác thực thông báo và xác thực thực thể ?

2 Giải thích rõ tính tươi của thông báo và tính sống của thực thể?

3 Tính hiện hành của hành động mật mã được thực hiện bởi giao thức xác thực thực thể có cần phải hàm ý tính tươi của thông báo được gửi bởi thực thể đó?

4 Tại sao tính nguyên vẹn dữ liệu của thông báo giao thức được lập mã lại quan trọng đối với độ mật của thông báo?

5 Trong những kiến thiết cơ bản nhất của các giao thức xác thực thì đâu là sự khác nhau cơ bản giữa kiến thiết chuẩn và phi chuẩn?

6 Hãy chỉ ra sự kiến thiết phi chuẩn trong giao thức Woo-Lam?

7 Tại sao mật khẩu 8 ký tự ASCII chứa lượng thông tin ít hơn rất nhiều so với không gian tạo thành từ 64 bít?

8 Phụ gia muối trong giao thức xác thực dựa trên mật khẩu là gì? Vai trò của phụ gia muối là gì?

9 Giao thức EKE sử dụng kỹ thuật mật mã phi đối xứng Nó có là giao thức xác thực dựa trên khoá công khai?

10 Trong giao thức STS “chỉ xác thực thôi” chúng ta đã chỉ ra khiếm khuyết Hãy sửa lại giao thức để loại bỏ khiếm khuyết này

11 Hãy viết trên ngôn ngữ Maple chương trình thực hiện các giao thức xác thực đã học.

MỘT SỐ CHUẨN MẬT MÃ

CHUẨN MÃ DÒNG

Trong chuẩn quốc tế ISO/IEC 18933-4:2005, Phần 4 giới thiệu bốn thuật toán mã dòng, bao gồm SNOW 2.0, MUGI, RABBIT, DECIM và Kcipher-2 (K2) Trong đó, thuật toán SNOW 2.0 được thiết kế chủ yếu cho việc thực hiện phần mềm, trong khi MUGI tập trung vào việc thực hiện phần cứng.

Vào năm 2000, mật mã SNOW 1.0 được đề xuất bởi Ekdahl và Johansson, nhưng đã phát hiện ra một số điểm yếu trong thiết kế của nó Đến năm 2002, các tác giả đã giới thiệu thuật toán SNOW 2.0, khắc phục những vấn đề trước đó Thuật toán này sau đó được công nhận và đưa vào tiêu chuẩn quốc tế ISO/IEC 18933-4:2005.

Mật mã SNOW có tốc độ thực hiện nhanh hơn AES nhiều lần, và SNOW 2.0 còn vượt trội hơn SNOW 1.0 về hiệu suất khi chạy trên phần mềm Xem thêm chi tiết ở [chương 6: 1, 2].

6.1.1.Tóm tắt thuật toán gốc SNOW 1.0

Thuật toán gốc SNOW 1.0 là mã dòng định hướng từ với độ dài mỗi từ là 32 bít Khóa có thể có cỡ là 128 và 256 bít

Bộ sinh dòng khóa gồm một LFSR độ dài 16 trên 32

Máy trạng thái hữu hạn (FSM) F2 bao gồm hai thanh ghi 32 bít R1 và R2, cùng với một số phép toán để xác định đầu ra và trạng thái tiếp theo Quá trình hoạt động của mật mã bắt đầu bằng việc khởi tạo khóa, cung cấp các giá trị ban đầu cho LFSR và các thanh ghi R1, R2 trong FSM Sau đó, 32 bít đầu tiên của dòng khóa được tính bằng cách cộng bít đầu ra của FSM với phần tử cuối cùng của LFSR Toàn bộ mật mã được đồng bộ hóa, và 32 bít tiếp theo được tính tương tự Quá trình này được lặp lại để tạo ra dòng khóa liên tục.

Trong sơ đồ dưới đây, LFSR có đa thức phản hồi nguyên thủy trên F 2 32là p(x) = x 16 +x 13 +x 7 + -1 , trong đó 32

F 2 được sinh bởi đa thức bất khả quy: trên F2 và () = 0 Hơn nữa, cho s(1), s(2), …, s(16)  F 2 32là trạng thái của

LFSR Xét biểu diễn các phần tử trong 32

F 2 bằng cách sử dụng cơ sở { 31 , …,  2 ,

, 1}, nghĩa là nếu y  F 2 32thì y được biểu diễn bởi (y31, y30, …, y1, y0), trong đó y = y31 31 + y30 30 +…+ y1 + y0

Ta xem y31, y30, … là những bít có ý nghĩa cao nhất (MSB) và …, y1, y0 là những bít có ý nghĩa thấp nhất (LSB)

Sau khi đồng bộ, s(1) trở thành đầu vào của máy hữu hạn trạng thái (FSM) Đầu ra của FSM, ký hiệu là FSMout, được tính toán bằng cách XOR với s(16) để tạo thành dòng khóa.

Cuối cùng thì dòng khóa được XOR với bản rõ và cho ra bản mã

Bên trong FSM, các giá trị mới của R1 và R2 được cho như sau,

Trong bài viết này, ta sử dụng ký hiệu để cộng hai số nguyên x và y theo mod 2^32 Ký hiệu dịch vòng x sang trái 7 bước, trong khi ký hiệu cộng xy thể hiện phép cộng theo bít (x XOR y) giữa hai từ x và y.

Hộp S, ký hiệu S(x), bao gồm bốn hộp thế cỡ 8x8 và một hoán vị các bít thu được Đầu vào x được chia thành 4 byte, từ byte cao nhất đến byte thấp nhất, mỗi byte được đưa vào một ánh xạ phi tuyến chuyển đổi 8 bít thành 8 bít Sau khi ánh xạ, các bít trong từ kết quả được hoán vị để tạo ra đầu ra cuối cùng của hộp S.

6.1.2 Những điểm yếu trong SNOW 1.0

Vào năm 2002, một số bài báo đã phân tích và các tác giả của SNOW 1.0 đã phát hiện hai tính chất quan trọng của thuật toán mã hóa này, cho phép tiến hành tấn công với độ phức tạp dữ liệu lên tới 2^95 và độ phức tạp xử lý là 2^224 phép toán.

FSM chỉ có một đầu vào duy nhất là s(1) Một đặc điểm quan trọng khác là sự lựa chọn không tối ưu của đa thức phản hồi trong SNOW 1.0 Phương trình truy hồi tuyến tính được xác định như sau.

Có khoảng cách 3 từ giữa st và st+3, khoảng cách 6=2.3 giữa st+3 và st+9 Như vậy, bằng cách bình phương phương trình này, có

Ta nhận thấy rằng (st+i  st+i+6) có thể coi là một đầu vào đơn lẻ cho cả hai phương trình, cho phép kẻ tấn công chỉ cần tổng XOR mà không cần xác định rõ st+i và st+i+6 Điểm yếu thứ hai trong lựa chọn đa thức phản hồi xuất hiện khi xem xét các xấp xỉ tuyến tính theo bít, dẫn đến việc rút ra phương trình truy hồi tuyến tính cho từng vị trí bít Do đó, bất kỳ quan hệ nào theo bít trong FSM đều có thể chuyển thành tấn công phân biệt Copersmith, Halevi và Jutla đã phát hiện ra một quan hệ như vậy, và với tấn công phân biệt từ đó, họ cần khoảng 2^95 từ đầu ra với độ phức tạp tính toán khoảng 2^100 Qua tìm kiếm máy tính, các tác giả cũng đã tìm ra những quan hệ khác nhỏ hơn.

Các tác giả của SNOW 1.0 đã thực hiện nhiều thay đổi trong thiết kế SNOW 2.0 Trong phiên bản SNOW 2.0, hai phần tử khác nhau,  và  -1, được sử dụng trong vòng phản hồi, trong đó  là nghiệm của đa thức nguyên thủy bậc 4 trên 8.

F 2 Chính xác hơn, đa thức phản hồi của SNOW 2.0 được cho bởi trong đó  là nghiệm của và  là nghiệm của

Lưu đồ của SNOW 2.0 như hình phía dưới

Cho trạng thái của LFSR tại thời điểm t  0 là (st+15, st+14, …, st), st+i 32

0 Phần tử st là phần tử bên phải nhất như trong lưu đồ, và dãy được sinh bởi LFSR là (s0, s1, …) Với t = 0, ta muốn nói thời điểm ngay sau khi khởi tạo khóa Sau đó mật mã này được đồng bộ một lần trước khi sản sinh ra ký tự đầu tiên của dòng khóa, nghĩa là ký tự dòng khóa đầu tiên z1 được sinh ra ở thời điểm t = 1 Dãy khóa được ký hiệu là (z1, z2, …)

Máy trạng thái hữu hạn (FSM) bao gồm hai thanh ghi R1 và R2, mỗi thanh ghi có độ dài 32 bít Tại thời điểm t ≥ 0, giá trị của các thanh ghi được ký hiệu lần lượt là R1t và R2t Đầu vào của FSM là (st+15, st+5), trong khi đầu ra Ft được tính toán dựa trên các giá trị này Các thanh ghi R1 và R2 sẽ được cập nhật với các giá trị mới theo quy định đã được thiết lập.

Hộp S (Ký hiệu S()) là hoán vị trên 32

Z 2 sử dụng hàm vòng của Rijndael Đầu vào của hộp S được biểu diễn bằng vector  = (3, 2, 1, 0), trong đó 3 là byte có giá trị cao nhất Để bắt đầu, chúng ta sẽ áp dụng hộp S của Rijndael.

SR tới mỗi byte để được véc tơ

Trong biến đổi MixColumn của hàm Rijndael, mỗi từ 4 byte được coi như một đa thức trong F2^8, với đa thức không khả quy x^8 + x^4 + x^3 + x + 1 thuộc F2[x] Mỗi từ có thể được biểu diễn dưới dạng đa thức bậc cao nhất.

3 Sau đó ta xem véc tơ kết quả của SR như biểu diễn đa thức trên F 2 8 và nhân với đa thức cố định c(y) = (x+1)y 3 +y 2 +y+x  F 2 8 [y] modulo y 4 +1  F 2 8 [y]

CHUẨN MÃ KHỐI: AES

Năm 1997, NIST (trước đây là NBS) đã tổ chức một cuộc thi nhằm tìm kiếm thuật toán thay thế DES và tiến hành hội thảo công khai về tiêu chí cho Chuẩn mã hoá nâng cao Độ dài khoá được xác định là yếu tố quan trọng nhất, với một hội đồng đặc biệt vào năm 1996 cho rằng 90 bit là độ dài khoá tối thiểu để bảo đảm an ninh dữ liệu trong 20 năm Tuy nhiên, NIST đã yêu cầu độ dài khoá tối thiểu cao hơn và quyết định rằng 128 bit là mức tối thiểu cần thiết.

Mặc dù 3-DES được sử dụng rộng rãi, nhưng NIST không chấp nhận nó làm chuẩn kế nhiệm cho DES do nhiều lý do Thuật toán này có 48 vòng, nhưng thực tế chỉ hiệu quả với 32 vòng, dẫn đến hiệu suất chậm trong các ứng dụng xử lý hình ảnh số và dữ liệu tốc độ cao Kích thước khối 64 bit cũng là một nhược điểm lớn khi áp dụng trong các hệ thống hiện đại Vì vậy, 3-DES không phải là lựa chọn hấp dẫn cho chuẩn xử lý thông tin liên bang Hơn nữa, mặc dù ANSI phát triển 3-DES, NIST đã quyết định đầu tư vào việc phát triển các thuật toán mới với khả năng cao hơn.

Sau nhiều vòng xét tuyển, các hội đồng đã lựa chọn ra 5 thuật toán an toàn cao, bao gồm RC6, MARS, Rijndael, Twofish và Spent.

Vào ngày 2 tháng 10 năm 2000, NIST đã công bố Rijndael, thiết kế của J Daemen và V Rijmen từ Bỉ, là người chiến thắng cho mục tiêu mã hóa Thiết kế Rijndael nổi bật với sự đơn giản và hợp lý, không dựa trên kiến trúc DES Cuối cùng, thuật toán này được chọn vì sự kết hợp tối ưu về an toàn, hiệu suất thực thi và khả năng thực hiện, và được tin tưởng là có thể đảm bảo an toàn trong tương lai.

Trong suốt 20 năm qua, niềm tin vào Rijndael được xây dựng dựa trên không gian khóa rộng lớn của nó và khả năng chống lại các cuộc tấn công nổi tiếng.

Sự khác biệt chính giữa Rijndael và AES nằm ở kích cỡ đầu vào; Rijndael hỗ trợ nhiều kích cỡ đầu vào khác nhau, trong khi AES chỉ chấp nhận kích cỡ cố định là 128 bit.

6.2.1 Các byte như các đa thức

Thuật toán mật mã đối xứng Rijndael hoạt động trên các byte là các xâu 8 bit b7b6…b1b0, cũng như trên các từ là các xâu 32 bit hoặc xâu 4 byte

Tập B gồm 256 byte (2^8 phần tử) và cần được cấu trúc thành một trường hữu hạn Để đạt được điều này, cần thiết phải định nghĩa phép cộng trên B, tạo ra cấu trúc nhóm giao hoán với phần tử không là 00000000 Đồng thời, yêu cầu về phép nhân giao hoán cũng cần được thỏa mãn, đảm bảo rằng tất cả các phần tử khác 00000000 trong B đều có nghịch đảo.

6.2.1.1 Các biểu diễn của byte Định nghĩa:

Cho byte b7b6…b1b0, ta sẽ biểu diễn nó theo 3 cách và chọn một cách tự do giữa các biểu diễn này:

- Một byte là xâu bit có độ dài 8, như 10111011;

- Một byte có thể được viết như 2 kí tự hexa, như BB;

- Một byte có thể được viết như một đa thức modulo 2 bậc  7, như x 7 +x 5 +x 4 +x 3 +x+1 (cùng biểu diễn xâu bit 10111011)

6.2.1.2 Phép cộng 2 byte Định nghĩa:

Ta sử dụng a để ký hiệu 1 byte, độc lập với biểu diễn đa thức Phép cộng 2 byte ab đạt được bằng cách cộng các đa thức của chúng theo modulo 2

Byte 01000101 có dạng hexa là 45, dạng đa thức là x 6 +x 2 +1 Byte 01111000 có dạng hexa là 78, dạng đa thức là x 6 +x 5 +x 4 +x 3 Phần tử 4578 là:

(x 6 +x 2 +1)+ (x 6 +x 5 +x 4 +x 3 ) = x 5 +x 4 +x 3 +x 2 +1 mod 2, và dạng hexa là 3D (00111101)

Phép toán  làm cho B thành nhóm giao hoán với phần tử không là 00 Phép toán này tương ứng với phép XOR trên các xâu bit

6.2.1.3 Phép nhân 2 byte Định nghĩa:

Cho 2 byte a và b, ta định nghĩa tích a.b của chúng như tích trên các biểu diễn đa thức của chúng theo modulo đa thức m(x): m(x) = x 8 +x 4 +x 3 +x+1=1 00011011

Nếu a,b lần lượt là: x 6 +x 2 +1 (45), x 3 +x (0A) thì tích của chúng là: a.b = (x 6 +x 2 +1)( x 3 +x) mod m(x) =( x 9 +x 7 +x 5 +x) mod m(x) = x 7 +x 4 +x 2 Điều này dẫn đến dạng hexa:

6.2.1.4 Phép dịch chuyển vòng của từ vào

Phép toán xtime: xtime:B→B xtime(a) →a.02

Có 2 trường hợp xảy ra:

(i) Nếu a7 = 0 thì a.02= a6x 7 +…+a1x 2 +a0x = a6a5 a00 Nghĩa là a.02 nhận được từ a nhờ dịch trái 1 bít: a.02 = shift(a)

Mật mã Rijndael sắp xếp bản rõ và các khóa vòng trong các mảng 2 chiều theo byte, với 4 dòng cố định và số cột thay đổi Mỗi cột biểu diễn một từ 32 bit, có thể được biểu diễn như một đa thức bậc nhỏ hơn 4: p(x)=a3x^3 +a2x^2 +a1x+a0 Các phép toán trên cột được thực hiện thông qua phép toán XOR, cho phép chuyển đổi giữa các từ như sau: p(x)⊕q(x)=(a3⊕b3)x^3 +(a2⊕b2)x^2 +(a1⊕b1)x+(a0⊕b0).

Trong toán học, tích của hai đa thức p(x) và q(x) được biểu diễn dưới dạng p(x).q(x)=c6x^6 + c5x^5 + c4x^4 + c3x^3 + c2x^2 + c1x + c0, trong đó các hệ số c0, c1, c2, c3, c4, c5, c6 được tính toán từ các hệ số a0, a1, a2, a3 và b0, b1, b2, b3 của hai đa thức Khi rút gọn đa thức tích của hai đa thức bậc 4, ta sẽ thu được một đa thức bậc 3, tương ứng với việc biểu diễn một từ 32 bit Định nghĩa của phép toán này được thể hiện qua công thức: p(x)⊗q(x)=p(x)q(x) mod M(x), với M(x)=x^4 + 1.

Ta biết rằng x i mod (x 4 +1) = x i mod 4 , iN Do đó khi đặt p(x)q(x) = d3x 3 + d2x 2 + d1x+d0 ta có thể tính di từ ci : p(x)q(x) = ( c6x 6 +c5x 5 + +c1x+c0) mod M(x) ( c6x 6 modM(x)+c5x 5 M(x)+ +c1x M(x)+c0 M(x)) mod M(x) c6x 6mod4 +c5x 5mod4 + +c1x 1mod4 +c0 = c6x 2 +c5x+c4+c3x 3 +c2x 2 +c1x+c0 3 2

Có thể viết dưới dạng ma trận:

Như vậy khi đã cho q(x) thì hàm số p(x) p(x)q(x) là tuyến tính và được cho bởi phép nhân ma trận trên

Khi p(x)=x (a3=a2=a0; a1) ta có: d0.b000.b100.b201.b3 = b3 d1.b000.b100.b200.b3 = b0 d2.b001.b100.b200.b3 = b1 d0.b000.b101.b200.b3 = b2 Phép toán tuyến tính này rõ ràng là một dịch chuyển vòng của từ vào

Rijndael là một mã khối, mã và giải mã cả một khối bít một lúc Độ dài của khối và độ dài của khoá khởi điểm có thể là 128, 129 hoặc 256 bit Mật mã này cho phép ta chọn những số khác nhau cho độ dài của khối và của khoá Chẳng hạn, ta có thể sử dụng Rijndael trên các khối rõ 128 bit và khoá 256 bit Thiết kế cho phép thậm chí mềm dẻo hơn trong việc chọn những số này, nhưng ba giá trị liệt kê này là phần cần thiết của thiết kế AES Định nghĩa:

Kí hiệu Nb là thương khi chia độ dài khối cho 32, Nk là thương khi chia độ dài khoá cho 32

Trạng thái là bản rõ hay bản mã trung gian được biểu diễn bởi các mảng byte 2 chiều với 4 dòng và Nb cột

Khóa cũng tương tự, nó được biểu diễn bởi mảng byte 2 chiều với 4 dòng và

Rõ ràng ( Nb,Nk) 4,6,84,6,8, vì vậy có 9 cặp tham số Ví dụ Nb 4, Nk = 6: a0,0 a0,1 a0,2 a0.3 a1,0 a1,1 a1,2 a1,3 a2,0 a2,1 a2,2 a2,3 a3,0 a3,1 a3,2 a3,3 k0,0 k0,1 k0,2 k0.3 k0,4 k0,5 k1,0 k1,1 k1,2 k1,3 k1,4 k1,5 k2,0 k2,1 k2,2 k2,3 k2,4 k3,5 k3,0 k3,1 k3,2 k3,3 k3,4 k3,5 Định nghĩa(Các khối vào và ra đối với Rijndael):

Các khối vào và ra đối với Rijndael là các mảng một chiều gồm các byte 8 bit, đánh số từ 0 đến 4*Nb-1

Các byte của khối vào được ánh xạ lên trạng thái theo thứ tự từ a0,0 đến a1,2, với việc làm đầy các cột trạng thái từ trên xuống dưới và từ trái sang phải Cụ thể, byte có chỉ số vào 0 được đặt tại a0,0, trong khi byte có chỉ số 9 được đặt tại a1,2.

Khoá mã là mảng một chiều gồm các byte 8 bit, đánh số từ 0 đến 4*Nk-1 Mảng khoá 2 chiều cũng được làm đầy tương tự như vậy

VìNb và Nk thuộc 4,6,8 nên phạm vi chỉ số của các mảng này tương ứng là: 0 15, 0 31, (4*Nb-1, 4*Nk-1 )

Bỏ qua các chỉ số trong mảng khoá mở rộng, phép mã hóa gồm:

.Bước khởi tạo, trong đó ta cộng khoá với trạng thái

.Nr-1 vòng với khoá vòng, extendeKey[Nb*i] đối với vòng i được rút ra từ Ciphrkey; và

Như vậy Nr là tổng số vòng và là hàm của Nb và Nk

Mỗi vòng trong quá trình xử lý có trạng thái hiện tại và một tham số gọi là khoá vòng Hàm Round(state, RoundKey) sẽ cập nhật trạng thái dựa trên RoundKey được cung cấp Trong mỗi vòng, ngoại trừ vòng cuối cùng, có bốn phép biến đổi được áp dụng cho trạng thái Chỉ có phép biến đổi cuối cùng là liên quan đến RoundKey.

Thực hiện phép thế byte cho phép mỗi byte của trạng thái được biến đổi độc lập và nhất quán, tạo điều kiện cho tính toán song song Sự độc lập này cũng giúp quá trình giải mã không bị ràng buộc bởi cấu trúc thiết kế Cụ thể, mỗi byte trong trạng thái được biến đổi tại chỗ thông qua hai phép toán.

Thứ nhất, byte ai,j được biến đổi thành nghịch đảo của nó đối với phép , byte

00 giữ nguyên không thay đổi:

Thứ hai, byte kết quả được biến đổi bởi ánh xạ affine

Ánh xạ này có nghịch đảo, và giá trị mới của ai,j trong trạng thái được xác định bởi toán tử nghịch đảo InvByteSub(state) Toán tử này đầu tiên áp dụng nghịch đảo của ánh xạ affine và sau đó tính nghịch đảo của byte kết quả theo phép (•), trong đó ánh xạ 00 thành chính nó Do đó, pha thứ 2 của InvByteSub(state) tương đương với pha đầu tiên của ByteSub(state), với sự chuyển đổi từ ai,j sang bi,j thông qua Bytesub(w).

Thực hiện biến đổi trên các dòng trạng thái, dòng đầu tiên (a0,0,a0,1…) giữ nguyên Các dòng còn lại sẽ bị dịch trái vòng theo byte: dòng thứ hai (a1,0,a1,1…) dịch trái c1 byte, dòng thứ ba dịch trái c2 byte, và dòng thứ tư cũng tương tự.

- c3 byte Các tham số dịch chuyển c1,c2,c3 là hàm của Nb( độ dài khối (theo byte) chia cho 32) Sự phụ thuộc này theo bảng sau:

CHUẨN MẬT MÃ KHÓA CÔNG KHAI VÀ CHỮ KÝ SỐ

Nhiều tổ chức chuẩn quốc tế đã đưa ra các tiêu chuẩn khác nhau liên quan đến mật mã khóa công khai và chữ ký số Trong bài viết này, chúng ta sẽ tìm hiểu một số tiêu chuẩn cơ bản và quan trọng nhất trong lĩnh vực này.

6.3.1 Chuẩn mật mã khóa công khai: RSA-OAEP

Lược đồ đệm mã hóa phi đối xứng tối ưu (OAEP) cho RSA được Bellare và Rogaway đề xuất vào năm 1994 RSA-OAEP được thiết kế nhằm đảm bảo hiệu quả và an toàn có thể chứng minh, chủ yếu dùng để mã hóa các thông báo ngắn, thường là khóa bí mật cho mã hóa đối xứng hoặc các thuật toán MAC Tiêu chuẩn này được nêu trong PKCS#1 v2.1.

Các ký hiệu sau đây được dùng để mô tả lược đồ mã hóa:

• Octet là một xâu 8 bít

• Khóa công khai RSA của A là (n,e), và khóa riêng tương ứng của A là d

Số nguyên n gồm k octet (chẳng hạn, nếu n là mô đun dài 1024 bít thì k = 128.)

• H là hàm hash có đầu ra dài l octet (Chẳng hạn, H có thể là SHA-1, khi đó l = 20.)

G là hàm sinh mặt nạ, nhận đầu vào là xâu octet s và số nguyên dương t < 2^32 Đầu ra của G là xâu octet có độ dài t, được tạo ra bằng cách nối các giá trị hash H(s||i) cho 0 ≤ i ≤ ⌊t/l⌋-1, sau đó loại bỏ các octet thừa ở bên phải nếu cần thiết, trong đó i là bộ đếm 32 bit.

• P bao gồm một vài tham số mã hóa (tùy chọn)

• Xâu đệm bao gồm một xâu các octet 00 (có thể là rỗng) theo sau là octet

Lược đồ mã hóa RSA-OAEP (B gửi thông báo m có độ dài tối đã k-2-2l octet tới A)

Mã hóa B làm như sau:

- Nhận bản sao khóa công khai được xác thực của A là (n,e)

- Chọn ngẫu nhiên mầm s dài l octet

- Áp dụng phép mã hóa OAEP (xem hình dưới đây)với các đầu vào s, P và m để được xâu octet M gồm k octet

Hình 6.4 Hàm mã hóa OAEP

- Kiểm tra xem c  [0, n-1] hay không; nếu không thì thông báo “lỗi” và dừng

- Sử dụng khóa riêng d để tính M = c d mod n

Áp dụng phép giải mã OAEP với đầu vào M, ta nhận được các xâu octet X, Q, T và m; trong đó X có độ dài l octet, Q là l octet đầu tiên của cơ sở dữ liệu, T là octet khác không đầu tiên sau Q, và m là các octet nằm bên phải của T.

- Nếu Q’  Q hoặc nếu X  00, hoặc nếu T 01 thì thông báo “lỗi” và dừng

Hình 6.5 Phép giải mã OAEP

RSA-OAEP được chứng minh là an toàn ngữ nghĩa chống lại các tấn công bản mã lựa chọn thích nghi trong mô hình tiên đoán ngẫu nhiên với giả thiết RSA Tuy nhiên, hiện nay, RSA-OAEP+ được khuyến nghị sử dụng thay thế vì nó có tính chất an toàn được chứng minh tốt hơn RSA-OAEP và cung cấp cơ chế an toàn cho việc mã hóa các thông báo có độ dài tùy ý Thông tin chi tiết về RSA-OAEP+ có thể được tham khảo tại [4].

6.3.2 Chuẩn chữ ký số: RSA-PSS

Lược đồ ký xác suất RSA-PSS, được đề xuất bởi Bellare và Rogaway vào năm 1996, nhằm mục đích cung cấp hiệu quả và an toàn có thể chứng minh Phiên bản RSA-PSS được mô tả trong PKCS#1 v2.1 có những điểm khác biệt đáng kể so với phiên bản gốc của hai tác giả Xem thêm chi tiết trong chương 6: 3.

Ta cần các ký hiệu sau đây để mô tả RSA-PSS:

• Khóa công khai RSA của A là (n,e), và khóa riêng tương ứng của A là d

Số nguyên n gồm k octet, và y bít (chẳng hạn, nếu n là mô đun dài 1028 bít thì k

• H là hàm hash có đầu ra dai l octet (chẳng hạn, H có thể là SHA-1, khi đó l = 20)

G là hàm sinh mặt nạ, trong đó đầu vào bao gồm xâu octet s và số nguyên dương t nhỏ hơn 2^32 Đầu ra của G là xâu octet có độ dài t, được tạo ra bằng cách nối các giá trị hash H(s||i) cho các giá trị 0≤i≤⌊t/l⌋-1, sau đó loại bỏ các octet thừa ở bên phải nếu cần thiết (i là bộ đếm 32 bit).

TF (trailer field) có thể bao gồm một octet đơn lẻ BC hoặc là sự kết hợp của hai octet HID và CC Trong đó, HID là octet đơn lẻ dùng để nhận dạng hàm H, theo quy định trong tiêu chuẩn ISO/IEC 10118.

•salt là xâu octet được sinh ngẫu nhiên

6.3.2.2 Lược đồ ký RSA-PSS (A ký thông báo cho B.)

1 Sinh chữ ký A làm như sau: Áp dụng hàm ký PSS (như trong hình dưới đây) cho thông báo m để nhận được xâu octet EM Xâu EM dài x octet, và biểu diễn số nguyên của nó có độ dài bít nhiều nhất là y-1 z bít bên trái nhất của EM là 0

Sử dụng khóa riêng d để tính s = EM d mod n

Gửi chữ ký s và thông báo m tới B

Hình 6.6 Hàm mã hóa PSS

2 Kiểm tra chữ ký B làm như sau:

Nhận bản sao có xác thực về khóa công khai (n,e) của A

Kiểm tra rằng s là số nguyên trong khoảng [0, n-1]; Nếu không thì thông báo

Nếu độ dài theo octet của EM lớn hơn x thì thông báo “lỗi” và dừng

Nếu giá trị bên trái nhất của EM khác 0, hãy thông báo “lỗi” và dừng lại Tiến hành áp dụng hàm giải mã PSS như trong hình minh họa Trong quá trình này, cần kiểm tra rằng chuỗi octet TF phải là octet đơn lẻ BC hoặc là sự kết hợp của hai octet HID và CC, trong đó HID là nhận dạng octet đơn lẻ của hàm H theo tiêu chuẩn ISO/IEC 10118 Đồng thời, cũng cần xác minh rằng chuỗi DB bắt đầu với chuỗi octet 00 có độ dài phù hợp, tiếp theo là octet 01.

Nếu h’ = H(m) thì chấp nhận chữ ký; ngược lại thì từ chối

Hướng dẫn của RSA-PSS không đề cập đến độ dài của muối, trong khi PKCS#1 v2.1 chỉ ra rằng độ dài điển hình của muối là 0 và l, được phân tích trong tài liệu khác Tuy nhiên, cần có những chỉ dẫn rõ ràng và cụ thể về độ dài của muối trong hướng dẫn của RSA-PSS để đảm bảo tính nhất quán và an toàn trong việc triển khai.

RSA-PSS đã được chứng minh là không thể giả mạo trong thực tế trước các tấn công thông báo lựa chọn thích nghi trong mô hình tiên đoán ngẫu nhiên với giả thiết RSA Phép suy dẫn này là chặt chẽ, mang lại sự bảo đảm mạnh mẽ cho tính an toàn của phương pháp Tuy nhiên, cần có thêm hướng dẫn về độ dài muối cần thiết khi sử dụng trong mã hóa RSA-PSS.

CHUẨN GIAO THỨC MẬT MÃ

Phần này sẽ trình bày toàn bộ dự thảo về các giao thức thỏa thuận khóa bí mật theo chuẩn Việt Nam, tương ứng với nội dung trong chuẩn ISO/IEC 11770-3.

6.4.1 Các vấn đề chung Các ký hiệu

Sau đây là các ký hiệu tắt được sử dụng trong tài liệu này

ID A , ID B Định danh của các thực thể A và B

BE Khối dữ liệu được mã hóa (enciphered data block)

BS Khối dữ liệu được ký (signed data block)

CA Tổ chức chứng thực

Cert A Chứng chỉ số khóa công khai của thực thể A

D A Phép giải mã bằng khóa riêng của thực thể A d A Khóa riêng của thực thể A

E A Phép biến đổi mã hóa công khai của thực thể A e A Khóa mã công khai của thực thể A

Hàm kiểm tra mật mã f K (Z) là giá trị kiểm tra mật mã, được tạo ra khi hàm này nhận đầu vào là một khóa bí mật K và một chuỗi dữ liệu Z.

Một phần tử chung được chia sẻ công khai giữa tất cả các thực thể sử dụng hàm thỏa thuận khóa F Khóa riêng của thực thể A được áp dụng trong quá trình thỏa thuận khóa thông qua hàm hash.

K Một khóa bí mật cho hệ mật đối xứng

K AB Khóa bí mật chia sẻ giữa hai thực thể A và B

Trong thực tế, khóa bí mật chia sẻ cần được xử lý thêm trước khi có thể áp dụng cho hệ mật đối xứng.

KT Thông báo thỏa thuận khóa

KT Ai thông báo rằng thỏa thuận khóa đã được gửi bởi thực thể A sau khi hoàn tất giai đoạn xử lý i Khóa công khai của thực thể A sẽ được áp dụng trong quá trình thực hiện thỏa thuận khóa.

PKI A Thông tin khóa công khai của thực thể A

Trong quá trình thực hiện của một lược đồ, một số ngẫu nhiên R được sinh ra Bên cạnh đó, một số ngẫu nhiên A được tạo bởi thực thể A trong lược đồ thỏa thuận khóa.

S A Hàm ký sử dụng khóa riêng của thực thể A s A Khóa riêng của thực thể A được sử dụng để ký

Texti Một trường dữ liệu tùy chọn

TVP Tham số biến đổi theo thời gian (time-variant), ví dụ như một số ngẫu nhiên, tem thời gian (time stamp) hoặc một số tuần tự (sequence number)

V A Hàm kiểm tra chữ ký sử dụng khóa công khai của thực thể A v A Khóa công khai được sử dụng để kiểm tra chữ ký của thực thể A

|| Nối hai phần tử dữ liệu với nhau

1 Không một giả định nào được tạo đối với bản chất của biến đổi chữ ký Trong trường hợp của hệ chữ ký với khả năng khôi phục thông báo, thì

S A m ký hiệu chính chữ ký  Trong trường hợp của hệ chữ ký cùng với phụ lục, thì S A ( ) m ký hiệu là thông báo m cùng với chữ ký số 

2 Các khóa của một hệ mật phi đối xứng được ký hiệu bằng chữ thường (biểu thị hàm sử dụng khóa này) và được đánh chỉ số là định danh của thực thể sở hữu khóa này, ví dụ khóa kiểm tra công khai của thực thể A được ký hiệu là v A Phép biến đổi tương ứng được ký hiệu bằng chữ hoa và được đánh chỉ số chỉ chủ sở hữu hàm này, ví dụ phép biến đổi để kiểm tra công khai của thực thể A được ký hiệu là V A

Trong tài liệu này, giả định rằng các thực thể biết định danh của nhau, điều này có thể được thực hiện thông qua việc gộp các định danh trong thông báo trao đổi hoặc coi là hiển nhiên Kiểm tra định danh là quá trình xác minh xem trường định danh nhận được có phù hợp với các giá trị tin cậy đã được biết hoặc mong đợi trước đó hay không.

Khi một thực thể đăng ký khóa công khai, họ cần đảm bảo rằng người đăng ký thực sự sở hữu khóa bí mật tương ứng.

Thỏa thuận khóa là quá trình thiết lập một khóa bí mật chia sẻ giữa hai thực thể A và B mà không ai trong số họ có thể biết trước giá trị của khóa này Các lược đồ thỏa thuận khóa không chỉ giúp tạo ra khóa mà còn cung cấp tính xác thực cho khóa ẩn, đảm bảo rằng chỉ những thực thể được định danh mới có quyền truy cập vào khóa bí mật chia sẻ sau khi thực thi lược đồ.

Thỏa thuận khóa giữa hai thực thể A và B diễn ra trong một ngữ cảnh chung, bao gồm các đối tượng: một tập G, một tập H và một hàm F Hàm F cần phải đáp ứng các yêu cầu nhất định để đảm bảo tính hợp lệ của thỏa thuận.

1 Hàm F nhận 2 đầu vào, một phần tử h thuộc tập H và một phần tử g thuộc

2 F thỏa mãn điều kiện giao hoán F h F h g ( A , ( B , ) )=F h F h g ( B , ( A , ) )

3 Khó tìm được F h F h g ( 1, ( 2, ) ) từ F h g ( 1, )và F h g ( 2, ) và g Tính chất này ngụ ý rằng F ( ) , g là hàm một chiều

4 Các thực thể A và B chia sẻ một phần tử chung g thuộc G, phần tử này có thể công khai được biết trước

5 Các thực thể có thể tính các giá trị của hàm F h g ( ) , một cách hiệu quả và có thể sinh các phần tử ngẫu nhiên thuộc H một cách hiệu quả

Phụ thuộc vào từng lược đồ trao đổi khóa cụ thể, một số điều kiện thêm có thể xuất hiện

Hãy xem xét hàm F cùng với các tập G và H, thỏa mãn 5 tính chất đã được liệt kê trước đó với các tham số được chọn phù hợp Giả sử p là một số nguyên tố lớn, G là tập các phần tử của trường Galois có p phần tử, ký hiệu là Fp, và H = {1, , p − 2} Gọi g là phần tử nguyên thủy của trường này.

F p Thiết lập hàm F như sau:

Hàm F có tích chất giao hoán với đối số là h như sau:

Số nguyên tố p cần đủ lớn để hàm F(g) có thể được coi là hàm một chiều Mỗi thực thể X sở hữu một khóa riêng h_X thuộc H, khóa này chỉ được biết bởi X Khóa công khai của X được tính là p_X = g^(h_X) mod p, và khóa này được biết bởi tất cả các thực thể.

Các chú ý về lựa chọn tham số

Đối với logarithm rời rạc với số nguyên tố, kích thước của số nguyên tố cần được lựa chọn để đảm bảo rằng việc tính toán logarithm rời rạc trong nhóm cyclic là không khả thi Ngoài ra, có thể áp đặt một số điều kiện khác về số nguyên tố nhằm làm cho việc tính toán logarithm rời rạc trở nên khó khăn hơn.

CÂU HỎI ÔN TẬP

1 Chuẩn mật mã ra đời nhằm mục đích gì?

2 Hãy mô tả sơ lược quá trình tuyển chọn AES

3 Hãy mô tả chuẩn mã dòng SNOW

4 Hãy mô tả chuẩn mã khối AES

5 Hãy mô tả và phân tích chuẩn mật mã khóa công khai RSA-OAEP

6 Hãy mô tả và phân tích chuẩn chữ ký số RSA-PSS

7 Hãy mô tả và phân tích từng giao thức trong dự thảo bộ chuẩn giao thức thỏa thuận khóa bí mật của Việt Nam

Ngày đăng: 24/12/2023, 11:45

w