Điều 2. Thông tư này có hiệu lực thi hành kể từ ngày 09 tháng 12 năm 2016. Điều 2. QUY ĐỊNH KỸ THUẬT Điều 2.1. Quy định chung Điều 2.2. Mã khối Điều 2.3. Chế độ hoạt động của mã khối Điều 2.4. Mã dòng Điều 2. QUY ĐỊNH KỸ THUẬT Điều 2.1. Chữ ký số Điều 2.2. Hàm băm Điều 2. QUY ĐỊNH KỸ THUẬT Điều 2.1. Các yêu cầu đối với giao thức thỏa thuận và vận chuyển khóa Điều 2.2. Giao thức thỏa thuận khóa sử dụng kỹ thuật mật mã phi đối xứng trên trường hữu hạn Điều 2.3. Giao thức thỏa thuận khóa sử dụng mật mã trên đường cong elliptic Điều 2.4. Hàm dẫn xuất khóa KDF Điều 2.5. Giao thức vận chuyển khóa bí mật Điều 2.6. Giao thức vận chuyển khóa công khai Điều 2.7. Quy định kỹ thuật cho các tham số Điều 2. QUY ĐỊNH KỸ THUẬT Điều 2.1. Các yêu cầu đối với giao thức thỏa thuận và vận chuyển khóa Điều 2.2. Giao thức thỏa thuận khóa sử dụng kỹ thuật mật mã phi đối xứng trên trường hữu hạn Điều 2.3. Giao thức thỏa thuận khóa sử dụng mật mã trên đường cong elliptic Điều 2.4. Hàm dẫn xuất khóa KDF Điều 2.5. Giao thức vận chuyển khóa bí mật Điều 2.6. Giao thức vận chuyển khóa công khai Điều 2.7. Quy định kỹ thuật cho các tham số. Điều này trình bày hai giao thức truyền thông tin khóa công khai từ một thực thể A đến một thực thể B. Giao thức thứ nhất (giao thứ 2.6.1) không sử dụng bên thứ ba tin cậy, theo giao thức này để kiểm tra tính toàn vẹn và nguồn gốc của thông tin khóa công khai, hai thực thể sử dụng một hàm băm được quy định tại QCVN 5 : 2016/BQP. Giao thức thứ hai (giao thức 2.6.2) giả thiết là chứng thư khóa công khai hợp lệ CertA của A được cấp bởi bên thứ ba tin cậy là Tổ chức chứng thực và cấp chứng chỉ khóa công khai CA, theo giao thức này thực thể B có thể truy cập vào bản sao có xác thực của phép kiểm tra khóa công khai của tổ chức này. Điều này trình bày hai giao thức truyền thông tin khóa công khai từ một thực thể A đến một thực thể B. Giao thức thứ nhất (giao thứ 2.6.1) không sử dụng bên thứ ba tin cậy, theo giao thức này để kiểm tra tính toàn vẹn và nguồn gốc của thông tin khóa công khai, hai thực thể sử dụng một hàm băm được quy định tại QCVN 5 : 2016/BQP. Giao thức thứ hai (giao thức 2.6.2) giả thiết là chứng thư khóa công khai hợp lệ CertA của A được cấp bởi bên thứ ba tin cậy là Tổ chức chứng thực và cấp chứng chỉ khóa công khai CA, theo giao thức này thực thể B có thể truy cập vào bản sao có xác thực của phép kiểm tra khóa công khai của tổ chức này.
2.2.1. Giao thức Bước 1. Kiến thiết thẻ khóa (A1): Thực thể A sinh một giá trị ngẫu nhiên và bí mật rA thuộc H, tính F(rA,g), kiến thiết thẻ khóa KTA1 và gửi tới thực thể B: KTA1 = F(rA,g) || Text1 Bước 2. Xử lý thẻ khóa và Kiến thiết khóa (B1): Thực thể B sinh một giá trị ngẫu nhiên và bí mật rB thuộc H, tiếp đó tính F(rB, g), rồi tính khóa bí mật dùng chung: KAB = F(rB,F(rA,g)) Tiếp theo, thực thể B tạo thẻ khóa KTB1 được ký như sau: KTB1 = SB(DB1) || (DB1) || Text3 trong đó DB1 = F(rB,g) || F(rA,g) || IDA || Text2 và gửi ngược trở lại cho thực thể A. Hình 1: Giao thức thỏa thuận khóa bí mật chia sẻ KAB Bước 3. Xử lý thẻ khóa (A2): Thực thể A kiểm tra chữ ký của thực thể B trên thẻ khóa KTB1 bằng cách sử dụng khóa kiểm tra công khai của B, kiểm tra định danh phân biệt của A và giá trị F(rA,g) đã được gửi ở Bước 1 (A1). Nếu quá trình kiểm tra thành công thì thực thể A sẽ tính khóa bí mật dùng chung là: KAB = F(rA,F(rB,g)) Thực thể A lại sử dụng khóa bí mật dùng chung KAB để kiểm tra giá trị kiểm tra mật mã (DB1). Sau đó thực thể A tạo thẻ khóa KTA2 được ký như sau: KTA2 = SA(DB2) || (DB2) || Text5 trong đó DB2 = F(rA,g) || F(rB,g) || IDB || Text4 và gửi thẻ này tới thực thể B. Bước 4. Xử lý thẻ khóa (B2): Thực thể B kiểm tra chữ ký của thực thể A trên thẻ khóa KTA2 sử dụng khóa kiểm tra công khai của A, sau đó kiểm tra định danh phân biệt của B và kiểm tra các giá trị F(rA,g), và F(rB,g), xem có phù hợp với các giá trị được trao đổi ở các bước trước hay không. Nếu quá trình kiểm tra thành công thì thực thể B sẽ kiểm tra giá trị kiểm tra mật mã (DB2) bằng cách tính: KAB = F(rA,,F(rB,g)) Bước 5. Thực thể A và thực thể B tính khóa bí mật chung K Các thực thể A và B sử dụng hàm dẫn xuất khóa tại Điều 2.4 để tính khóa K = KDF(KAB, Otherlnput) Trong đó OtherInput chứa các định danh IDA, IDB của A,B và các thông tin khác do A và B thỏa thuận. CHÚ THÍCH: Các trường Text1, Text2, Text3, Text4, Text5 là những trường dữ liệu chứa chứng thư số của A và B, và có thể một số thông tin khác như tem thời gian, định danh phiên liên lạc, v.v..) 2.2.2. Hàm thỏa thuận khóa 2.2.2.1. Hàm thỏa thuận khóa DH Cho trường hữu hạn nguyên tố Fp, ký hiệu tập H = {1, ...,p - 2}; g là phần tử sinh thuộc hàm thỏa thuận khóa Diffie-Hellman (DH) được xác định theo công thức: F(h,g) = gh,h Î H CHÚ THÍCH: Với hàm thỏa thuận DH thì thẻ khóa KTA1 có dạng : 2.2.2.2. Hàm thỏa thuận khóa MQV - (a,A); (b, B) là cặp khóa phi đối xứng tĩnh của A và B, A = ga, B = gb - (x,X),(y,Y) là cặp khóa phi đối xứng tức thời của A và B, X = gx,Y = gy, d = 2l + (X mod 2l), e = 2l + (Y mod 2l), l = |p|/2, l độ dài p tính bằng bit, F(x, g) = (YBe)x+da = (XAd)y+eb 2.2.1. Giao thức Bước 1. Kiến thiết thẻ khóa (A1): Thực thể A sinh một giá trị ngẫu nhiên và bí mật rA thuộc H, tính F(rA,g), kiến thiết thẻ khóa KTA1 và gửi tới thực thể B: KTA1 = F(rA,g) || Text1 Bước 2. Xử lý thẻ khóa và Kiến thiết khóa (B1): Thực thể B sinh một giá trị ngẫu nhiên và bí mật rB thuộc H, tiếp đó tính F(rB, g), rồi tính khóa bí mật dùng chung: KAB = F(rB,F(rA,g)) Tiếp theo, thực thể B tạo thẻ khóa KTB1 được ký như sau: KTB1 = SB(DB1) || (DB1) || Text3 trong đó DB1 = F(rB,g) || F(rA,g) || IDA || Text2 và gửi ngược trở lại cho thực thể A. Hình 1: Giao thức thỏa thuận khóa bí mật chia sẻ KAB Bước 3. Xử lý thẻ khóa (A2): Thực thể A kiểm tra chữ ký của thực thể B trên thẻ khóa KTB1 bằng cách sử dụng khóa kiểm tra công khai của B, kiểm tra định danh phân biệt của A và giá trị F(rA,g) đã được gửi ở Bước 1 (A1). Nếu quá trình kiểm tra thành công thì thực thể A sẽ tính khóa bí mật dùng chung là: KAB = F(rA,F(rB,g)) Thực thể A lại sử dụng khóa bí mật dùng chung KAB để kiểm tra giá trị kiểm tra mật mã (DB1). Sau đó thực thể A tạo thẻ khóa KTA2 được ký như sau: KTA2 = SA(DB2) || (DB2) || Text5 trong đó DB2 = F(rA,g) || F(rB,g) || IDB || Text4 và gửi thẻ này tới thực thể B. Bước 4. Xử lý thẻ khóa (B2): Thực thể B kiểm tra chữ ký của thực thể A trên thẻ khóa KTA2 sử dụng khóa kiểm tra công khai của A, sau đó kiểm tra định danh phân biệt của B và kiểm tra các giá trị F(rA,g), và F(rB,g), xem có phù hợp với các giá trị được trao đổi ở các bước trước hay không. Nếu quá trình kiểm tra thành công thì thực thể B sẽ kiểm tra giá trị kiểm tra mật mã (DB2) bằng cách tính: KAB = F(rA,,F(rB,g)) Bước 5. Thực thể A và thực thể B tính khóa bí mật chung K Các thực thể A và B sử dụng hàm dẫn xuất khóa tại Điều 2.4 để tính khóa K = KDF(KAB, Otherlnput) Trong đó OtherInput chứa các định danh IDA, IDB của A,B và các thông tin khác do A và B thỏa thuận. CHÚ THÍCH: Các trường Text1, Text2, Text3, Text4, Text5 là những trường dữ liệu chứa chứng thư số của A và B, và có thể một số thông tin khác như tem thời gian, định danh phiên liên lạc, v.v..) 2.2.2. Hàm thỏa thuận khóa 2.2.2.1. Hàm thỏa thuận khóa DH Cho trường hữu hạn nguyên tố Fp, ký hiệu tập H = {1, ...,p - 2}; g là phần tử sinh thuộc hàm thỏa thuận khóa Diffie-Hellman (DH) được xác định theo công thức: F(h,g) = gh,h Î H CHÚ THÍCH: Với hàm thỏa thuận DH thì thẻ khóa KTA1 có dạng : 2.2.2.2. Hàm thỏa thuận khóa MQV - (a,A); (b, B) là cặp khóa phi đối xứng tĩnh của A và B, A = ga, B = gb - (x,X),(y,Y) là cặp khóa phi đối xứng tức thời của A và B, X = gx,Y = gy, d = 2l + (X mod 2l), e = 2l + (Y mod 2l), l = |p|/2, l độ dài p tính bằng bit, F(x, g) = (YBe)x+da = (XAd)y+eb
a) S-Box Bảng 2: S-Box: các giá trị thay thế cho byte {xy} (theo dạng thập lục phân)
b) S-Box nghịch đảo Bảng 3: S-Box nghịch: thay thế các giá trị theo byte {xy} (dạng thập lục phân)
2.3.1. Giao thức DH Bước 1. Kiến thiết thẻ khóa (A1) Thực thể A chọn ngẫu nhiên và bí mật số rA thuộc khoảng {2,…, m - 2}, tính rAG, kiến thiết thẻ khóa KTA1 =rAG và gửi cho B. Bước 2. Xử lí thẻ khóa và kiến thiết thẻ khóa (B1) Thực thể B kiểm tra thẻ khóa KTA1 có phải là điểm nằm trên đường cong Elliptic hay không (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1). Thực thể B chọn ngẫu nhiên và bí mật rB thuộc khoảng {2, …, m- 2}, tính rBG, tính bí mật chia sẻ KAB = (rBl)(hKTA1), kiến thiết thẻ được ký hiệu KTB1: KTB1 = SB(DB1) || (DB1) với DB1 = rBG || KTA1 || IDA || Text1 và gửi cho A. Bước 3. Xử lí thẻ khóa (A2) Thực thể A kiểm tra chữ ký của B trên thẻ khóa KTB1 sử dụng khóa kiểm tra công khai của B. Nếu sử dụng lược đồ chữ ký có khôi phục bản rõ thì việc kiểm tra bao gồm cả việc khôi phục khối dữ liệu DB1 từ chữ ký và kiểm tra liệu định danh phân biệt của A và giá trị rAG có chứa trong DB1 không. Nếu sử dụng chữ ký có đính kèm bản rõ thì việc kiểm tra bao gồm cả việc thiết kế lại khối dữ liệu DB1 sử dụng giá trị trong KTA1, định danh phân biệt của A, giá trị nhận được rBG và kiểm tra chữ ký trên khối dữ liệu này. Tiếp đó thực thể A kiểm tra, liệu giá trị rBG nhận được từ KTB1 có phải là điểm trên đường cong elliptic hay không (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1). Nếu đúng thì A tính khóa chia sẻ KAB = (rA.l)(h.rBG). Sử dụng KAB, thực thể A kiểm tra (DB1). Tiếp đó A thiết kế thẻ khóa có ký hiệu KTA2 = SA(DB2) || (DB2) ở đây DB2 = rAG || rBG || B || Text2 (DB2 = rAG || rBG || IDB || Text2) và gửi cho B. Bước 4. Xử lí thẻ khóa (B2) Thực thể B kiểm tra chữ ký của A trên thẻ khóa KTA2 bằng cách sử dụng khóa kiểm tra công khai của A. Nếu sử dụng sơ đồ chữ ký có khôi phục bản rõ thì điều này bao gồm cả việc khôi phục khối dữ liệu DB2 từ chữ ký và kiểm tra định danh phân biệt của B, các giá trị rAG và rBG có chứa trong khối này không. Nếu sử dụng chữ ký có đính kèm bản rõ thì việc kiểm tra bao gồm cả việc thiết kế lại khối dữ liệu DB2 sử dụng các giá trị trong KTA1 và KTB1, định danh phân biệt của B và kiểm tra chữ ký trên khối dữ liệu này. Nếu việc kiểm tra thành công thì thực thể B kiểm tra (DB2) sử dụng khóa chia sẻ KAB = (rBl)(hKTA1). Bước 5. Thiết lập khóa bí mật K Thực thể A và B sử dụng hàm dẫn xuất khóa KDF tại Điều 2.4 để thiết lập khóa bí mật. K = KDF(KAB,OtherInput). 2.3.2. Thỏa thuận khóa MQV Bước 1. Thiết kế thẻ khóa (A1) Thực thể A chọn ngẫu nhiên và bí mật số rA thuộc khoảng {2,…,m - 2} tính rAG và kiến thiết thẻ khóa KTA1 = rAG và gửi cho thực thể B. Bước 2. Kiến thiết thẻ khóa (B1) Thực thể B kiểm tra thẻ KTA1 có phải là điểm trên đường cong elliptic (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1:2016). Thực thể B chọn ngẫu nhiên và bí mật số rB thuộc khoảng {2,...,m - 2}, tính rBG, thiết kế thẻ khóa KTB1 = rBG, tiếp đó tính khóa bí mật chia sẻ KAB: KAB = ((rB + n(KTB1)dB).l)(h.(KTA1 + p(KTA1)PA)) Tiếp đó B tính K = KDF(KAB) và gửi (2,KTA1,KTB1) gửi MACK(2,KTA1,KTB1) cho A cùng với thẻ khóa KTB1. Bước 3. Kiến thiết thẻ khóa (A2) Thực thể A tính khóa bí mật chia sẻ : KAB = ((rA + p(KTA1)dA).l)(h.(KTB1 + p(KTB1)PB)) và kiểm tra MACK(2,KTA1,KTB1) Tiếp đó A tính MACK(3,KTA1,KTB1) và gửi cho B. Bước 4. Kiểm tra (B2) Thực thể B tính MACK(3,KTA1,KTB1) và kiểm tra thực thể A. 2.3.1. Giao thức DH Bước 1. Kiến thiết thẻ khóa (A1) Thực thể A chọn ngẫu nhiên và bí mật số rA thuộc khoảng {2,…, m - 2}, tính rAG, kiến thiết thẻ khóa KTA1 =rAG và gửi cho B. Bước 2. Xử lí thẻ khóa và kiến thiết thẻ khóa (B1) Thực thể B kiểm tra thẻ khóa KTA1 có phải là điểm nằm trên đường cong Elliptic hay không (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1). Thực thể B chọn ngẫu nhiên và bí mật rB thuộc khoảng {2, …, m- 2}, tính rBG, tính bí mật chia sẻ KAB = (rBl)(hKTA1), kiến thiết thẻ được ký hiệu KTB1: KTB1 = SB(DB1) || (DB1) với DB1 = rBG || KTA1 || IDA || Text1 và gửi cho A. Bước 3. Xử lí thẻ khóa (A2) Thực thể A kiểm tra chữ ký của B trên thẻ khóa KTB1 sử dụng khóa kiểm tra công khai của B. Nếu sử dụng lược đồ chữ ký có khôi phục bản rõ thì việc kiểm tra bao gồm cả việc khôi phục khối dữ liệu DB1 từ chữ ký và kiểm tra liệu định danh phân biệt của A và giá trị rAG có chứa trong DB1 không. Nếu sử dụng chữ ký có đính kèm bản rõ thì việc kiểm tra bao gồm cả việc thiết kế lại khối dữ liệu DB1 sử dụng giá trị trong KTA1, định danh phân biệt của A, giá trị nhận được rBG và kiểm tra chữ ký trên khối dữ liệu này. Tiếp đó thực thể A kiểm tra, liệu giá trị rBG nhận được từ KTB1 có phải là điểm trên đường cong elliptic hay không (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1). Nếu đúng thì A tính khóa chia sẻ KAB = (rA.l)(h.rBG). Sử dụng KAB, thực thể A kiểm tra (DB1). Tiếp đó A thiết kế thẻ khóa có ký hiệu KTA2 = SA(DB2) || (DB2) ở đây DB2 = rAG || rBG || B || Text2 (DB2 = rAG || rBG || IDB || Text2) và gửi cho B. Bước 4. Xử lí thẻ khóa (B2) Thực thể B kiểm tra chữ ký của A trên thẻ khóa KTA2 bằng cách sử dụng khóa kiểm tra công khai của A. Nếu sử dụng sơ đồ chữ ký có khôi phục bản rõ thì điều này bao gồm cả việc khôi phục khối dữ liệu DB2 từ chữ ký và kiểm tra định danh phân biệt của B, các giá trị rAG và rBG có chứa trong khối này không. Nếu sử dụng chữ ký có đính kèm bản rõ thì việc kiểm tra bao gồm cả việc thiết kế lại khối dữ liệu DB2 sử dụng các giá trị trong KTA1 và KTB1, định danh phân biệt của B và kiểm tra chữ ký trên khối dữ liệu này. Nếu việc kiểm tra thành công thì thực thể B kiểm tra (DB2) sử dụng khóa chia sẻ KAB = (rBl)(hKTA1). Bước 5. Thiết lập khóa bí mật K Thực thể A và B sử dụng hàm dẫn xuất khóa KDF tại Điều 2.4 để thiết lập khóa bí mật. K = KDF(KAB,OtherInput). 2.3.2. Thỏa thuận khóa MQV Bước 1. Thiết kế thẻ khóa (A1) Thực thể A chọn ngẫu nhiên và bí mật số rA thuộc khoảng {2,…,m - 2} tính rAG và kiến thiết thẻ khóa KTA1 = rAG và gửi cho thực thể B. Bước 2. Kiến thiết thẻ khóa (B1) Thực thể B kiểm tra thẻ KTA1 có phải là điểm trên đường cong elliptic (kiểm tra theo tiêu chuẩn ISO/IEC 15946-1:2016). Thực thể B chọn ngẫu nhiên và bí mật số rB thuộc khoảng {2,...,m - 2}, tính rBG, thiết kế thẻ khóa KTB1 = rBG, tiếp đó tính khóa bí mật chia sẻ KAB: KAB = ((rB + n(KTB1)dB).l)(h.(KTA1 + p(KTA1)PA)) Tiếp đó B tính K = KDF(KAB) và gửi (2,KTA1,KTB1) gửi MACK(2,KTA1,KTB1) cho A cùng với thẻ khóa KTB1. Bước 3. Kiến thiết thẻ khóa (A2) Thực thể A tính khóa bí mật chia sẻ : KAB = ((rA + p(KTA1)dA).l)(h.(KTB1 + p(KTB1)PB)) và kiểm tra MACK(2,KTA1,KTB1) Tiếp đó A tính MACK(3,KTA1,KTB1) và gửi cho B. Bước 4. Kiểm tra (B2) Thực thể B tính MACK(3,KTA1,KTB1) và kiểm tra thực thể A.
a) Các biến được sử dụng trong chế độ CBC: 1) Dãy q khối bản rõ có độ dài n bit P1, P2, …, Pq. 2) Khóa bí mật K. 3) Dãy các biến khởi đầu có độ dài n bit SV1, SV, ...,SVm. a) Các biến đầu vào 1) Dãy q biến bản rõ độ dài j bit P1, P2, …, Pq. 2) Khóa bí mật K. 3) Biến khởi đầu độ dài r bit. a) Xi = n~FBi (Lựa chọn n bit tận cùng bên trái của FB). a) Xi = n~FBi (Lựa chọn n bit tận cùng bên trái của FB). a) Các biến đầu vào: 1) Dãy q biến bản rõ độ dài j bit P1, P2, ... Pq. 2) Khóa bí mật K. 3) Biến khởi đầu độ dài n bit. a) Yi = ek(Xi) (Sử dụng mã khối). a) Yi = ek(Xi) (Sử dụng mã khối). a) Các biến đầu vào: 1) Dãy q biến bản rõ độ dài j bit P1, P2, …, Pq, mỗi biến có độ dài j bit. 2) Khóa bí mật K. 3) Biến khởi đầu SV có độ dài n bit. a) Yi = eK(CTRi) (Sử dụng mã khối). a) Yi = eK(CTRi) (Sử dụng mã khối).
b) Các biến đầu ra là dãy q biến bản mã có độ dài n bit C1, C2,..., Cq b) Các kết quả trung gian: 1) Dãy q khối đầu vào của mã khối độ dài n bit X1,X2,...,Xq. 2) Dãy q khối đầu ra của mã khối độ dài n bit Y1,Y2,...,Yq. 3) Dãy q biến độ dài j bit E1,E2,...,Eq. 4) Dãy q - 1 biến phản hồi độ dài k bit F1,F2,...,Fq-1. 5) dãy q nội dung bộ đệm phản hồi độ dài r bit FB1,FB2,...,FBq. b) Yi = eK(Xi) (Sử dụng mã khối). b) Yi = eK(Xi) (Sử dụng mã khối). b) Các kết quả trung gian: 1) Dãy q khối đầu vào của mã khối độ dài n bit X1, X2,..., Xq. 2) Dãy q khối đầu ra của mã khối độ dài n bit Y1, Y2,..., Yq. 3) Dãy q biến độ dài j bit E1, E2,..., Eq. b) Ei = j~Yi (Chọn j bit tận cùng bên trái). b) Ei = j~Yi (Chọn j bit tận cùng bên trái). b) Các kết quả trung gian: 1) Dãy q khối đầu vào của mã khối độ dài n bit CTR1,CTR2,...,CTRq. 2) Dãy q khối đầu ra của mã khối độ dài n bit Y1,Y2,...,Yq. 3) Dãy q biến độ dài j bit E1,E2,...,Eq. b) Ei = j~Yi (Chọn j bit tận cùng bên trái của Yi). b) Ei = j~Yi (Chọn j bit tận cùng bên trái của Yi).
c) Các biến đầu ra là dãy q biến bản mã độ dài j bit C1,C2,...,Cq. c) Ei = j~Yi (Lựa chọn j bit tận cùng bên trái của Yi). c) Ei = j~Yi (Lựa chọn j bit tận cùng bên trái của Yi). c) Các biến đầu ra là dãy q biến bản mã độ dài j bit C1, C2,..., Cq. c) Ci = Pi Å Ei (Tạo biến bản mã). c) Ci = Pi Å Ei (Tạo biến bản mã). c) Các biến đầu ra là dãy q biến bản mã độ dài j bit C1,C2,...,Cq. c) Ci = Pi Å Ei (Tạo ra biến bản mã). c) Pi = Ci Å Ei (Tạo biến bản rõ).
d) Ci = Pi Å Ei (Tạo biến bản mã). d) Pi = Ci Å Ei (Tạo biến bản rõ). d) Xi+1 = Yi (Phép toán phản hồi). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (c). Các biến bản mã và bản rõ có các bit với chỉ số từ 1 đến j. Kết quả của mỗi lần sử dụng mã khối là Yi và được đưa trở lại thành giá trị tiếp theo của X, đặt là Xi+1. j bit tận cùng bên trái của Yi được sử dụng để mã hóa biến đầu vào. d) Xi+1 = Yi (Phép toán phản hồi). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (c). Các biến bản mã và bản rõ có các bit với chỉ số từ 1 đến j. Kết quả của mỗi lần sử dụng mã khối là Yi và được đưa trở lại thành giá trị tiếp theo của X, đặt là Xi+1. j bit tận cùng bên trái của Yi được sử dụng để giải mã biến đầu vào. Hình 11: Chế độ phản hồi đầu ra OFB d) CTRi+1 = (CTRi + 1)mod 2n (Tạo ra giá trị đếm mới CTR). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (c). Các biến bản mã và bản rõ có các bit có chỉ số từ 1 đến j. Giá trị đếm được mã hóa để đưa ra khối đầu ra Yi và j bit tận cùng bên trái của khối đầu ra Yi được sử dụng để mã hóa giá trị đầu vào. CTR sau đó được tăng 1 (modulo 2n) để tạo ra giá trị đếm mới. d) CTRi+1 = (CTRi + 1)mod 2n (Tạo ra giá trị đếm mới CTR). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (c). Các biến bản mã và bản rõ có các bit có chỉ số từ 1 đến j. Giá trị đếm được mã hóa để đưa ra khối đầu ra Yi và j bit tận cùng bên trái của khối đầu ra Yi được sử dụng để mã hóa giá trị đầu vào. CTR sau đó được tăng 1 (modulo 2n) để tạo ra giá trị đếm mới. Hình 12: Chế độ đếm CTR
e) Fi = I(k - j)|Ci (Tạo biến phản hồi). e) Fi = l(k - j)|Ci (Tạo biến phản hồi).
f) FBi+1 = Sk(FBi|Fi) (Hàm dịch chuyển trên FB). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (d). j bit tận cùng bên trái của khối đầu ra Y của mã khối được sử dụng để mã hóa j-bit biến bản rõ theo phép cộng modulo 2. Các bit còn lại của Y được bỏ đi. Các bit biến bản rõ/bản mã có chỉ số từ 1 đến j. Biến bản mã được tăng thêm bằng cách đặt k - j bit trong vị trí bit tận cùng bên trái của mình để tạo biến phản hồi F độ dài k-bit. Sau đó các bit của bộ đệm phản hồi FB được dịch trái đi k vị trí và F được thêm vào vị trí k tận cùng bên phải để tạo ra giá trị mới của bộ đệm phản hồi FB. Trong phép toán dịch, k bit tận cùng bên trái của FB được bỏ đi. n bit tận cùng bên trái mới của FB được sử dụng như là đầu vào tiếp theo của X trong quá trình mã hóa. f) FBi+1 = Sk(FBi|Fi) (Hàm dịch chuyển trên FB). Các bước trên lặp với biến đếm i = 1,2,…,q, trong vòng lặp cuối dừng lại tại bước (d). j bit tận cùng bên trái của khối đầu ra Y của mã khối được sử dụng để giải mã biến bản mã theo phép cộng modulo 2. Các bit còn lại của Y được bỏ đi. Các bit biến bản rõ/bản mã có chỉ số từ 1 đến j. Biến bản mã được tăng thêm bằng cách đặt k - j bit trong vị trí bit tận cùng bên trái của mình để tạo biến phản hồi F độ dài k-bit. Sau đó các bit của bộ đệm phản hồi FB được dịch trái đi k vị trí và F được thêm vào vị trí k tận cùng bên phải để tạo ra giá trị mới của bộ đệm phản hồi FB. Trong phép toán dịch, k bit tận cùng bên trái của FB được bỏ đi. n bit tận cùng bên trái mới của FB được sử dụng như là đầu vào tiếp theo của X trong quá trình mã hóa. Hình 10: Chế độ phản hồi mã CFB
2.1.1. Quy định kỹ thuật 2.1.1.1. Quy định chung: Quá trình chữ ký số Sử dụng Ghi chú Tạo chữ ký số Độ an toàn ≥ 112 bit: DSA: |p| ≥ 2048 và |q| ≥ 224 RSA: |n| ≥ 2048 EC: |n| ≥ 224 Xác thực chữ ký số Độ an toàn ≥ 112 bit: DSA: |p| ≥ 2048 và |q| ≥ 224 RSA: |n| ≥ 2048 EC: |n| ≥ 224 2.1.1.2. Quy định chi tiết về nguồn ngẫu nhiên: Các số ngẫu nhiên được sử dụng cho các mục đích khác nhau như để sinh các tham số mật mã, các khóa mật mã, các giá trị ngẫu nhiên dùng một lần và các giá trị thách đố xác thực. Một số bộ sinh bit ngẫu nhiên tất định DRBG được chấp thuận để sử dụng theo quy định chung bao gồm: HASH_DRBG, HMAC_DRBG và CTR_DRBG. Các bộ sinh bit ngẫu nhiên RBG tuân theo SP800-90A phiên bản sửa đổi lại năm 2015 để sinh bit ngẫu nhiên cũng được chấp thuận để sử dụng tiếp. 2.1.2. Chữ ký số RSA-PSS 2.1.2.1. Các yêu cầu chung 2.1.2.2. Quy định chi tiết về các khóa RSA 2.1.2.3. Tạo chữ ký số RSASSA - PSS - SIGN(K, M) Đầu vào: K khóa bí mật RSA của người ký M thông điệp sẽ được ký, là một chuỗi octet Đầu ra: S chữ ký, chuỗi octet có độ dài k, với k là độ dài của modulo RSA theo octet Thông báo lỗi: “văn bản quá dài”, “lỗi định dạng” Các bước: 2.1.2.4. Xác thực chữ ký số RSASSA - PSS - VERlFY((n, e), M, s) Đầu vào: (n, e) khóa công khai RSA của người ký M thông điệp mà chữ ký của nó cần được kiểm tra, là chuỗi octet S chữ ký được kiểm tra, chuỗi octet có độ dài k, với k là độ dài theo octet của số n, modulo RSA Đầu ra: “chữ ký hợp lệ” hoặc “chữ ký không hợp lệ” Các bước: 2.1.3. Chữ ký số ECDSA 2.1.3.1. Quy định chi tiết về các khóa ECDSA: Kiểm tra tính hợp lệ của các tham số miền (p,SEED, a, b, G, n, h) như sau: Xâu SEED dùng để sinh ngẫu nhiên đường cong Elliptic xác định trên trường Fp với p là số nguyên tố lẻ. Trước khi sử dụng một bộ tham số miền, tính hợp lệ của nó phải được kiểm tra theo thuật toán dưới đây: 2.1.3.2. Tạo chữ ký số Thuật toán Chữ ký số Đường cong Elliptic (ECDSA) thực hiện việc sinh chữ ký của thông báo m, làm việc như sau: Sinh chữ ký ECDSA Đầu vào: Các tham số miền (E,P), khóa bí mật d, thông báo m. Đầu ra: Chữ ký (r, s). 2.1.3.3. Xác thực chữ ký số Để kiểm tra chữ ký số (r,s) của thông báo m, người kiểm tra tính các bước sau (Q = dP - ký hiệu khóa công khai): Kiểm tra chữ ký ECDSA Đầu vào: Các tham số miền (E,P), khóa công khai Q, thông báo m, chữ ký (r,s) Đầu ra: Chấp nhận hoặc bác bỏ chữ ký. 2.1.4. Chữ ký số DSA 2.1.4.1. Quy định chi tiết về các khóa DSA: 2.1.4.2. Tạo chữ ký số Chọn N là độ dài bit của q,min(N, outlen) biểu thị số nguyên dương nhỏ nhất N và outlen là độ dài bit của khối đầu ra hàm băm. Chữ ký của một thông điệp M bao gồm cặp số r và s được tính toán như sau: r = (gk mod p) mod q. z = các bit tận cùng bên trái min(N, outlen) của Hash(M). s = (k-1(z + xr))mod q. Khi tính s, xâu z thu được từ hàm Hash(M) sẽ được biến đổi sang một số nguyên. Chú ý r có thể được tính bất cứ khi nào nếu biết k, p, q và g. Ví dụ: bất cứ khi nào các tham số miền p, q và g được biết, và k được tính toán trước thì r cũng có thể được tính trước vì thông tin của thông báo được ký không yêu cầu các tính toán của r. Việc tính trước giá trị k, k-1 và r sẽ được bảo vệ một cách tương tự như khóa riêng x tới khi tính toán xong s. Giá trị của r và s sẽ được kiểm tra để xác định xem r = 0 hay s = 0. Nếu một trong hai r = 0 hoặc s = 0 thì một giá trị mới của k sẽ được sinh ra và chữ ký sẽ được tính toán lại. Nếu chữ ký số được sinh ra đúng đắn, thì rất hiếm khi xảy ra r = 0 hoặc s = 0. Chữ ký (r,s) có thể được truyền đi cùng thông điệp để xác thực. 2.1.4.3. Xác thực chữ ký số Gọi M', r’ và s’ là các phiên bản tương ứng đã nhận được của M, r và s; gọi y là khóa công khai của người ký; gọi N là độ dài bit của q, và min(N, outlen) biểu thị số nguyên dương nhỏ nhất n và outlen, ở đây outlen là độ dài bit của khối đầu ra hàm băm. Tiến trình xác thực chữ ký được thực hiện như sau: 2.1.5. Chữ ký số RSASSA-PKCS1-v1_5 2.1.5.1. Các yêu cầu chung 2.1.5.2. Quy định chi tiết về các khóa RSA 2.1.5.3 Tạo chữ ký số RSASSA - PKCS1 - V1_5 - SIGN (K,M) Đầu vào: K khóa bí mật RSA của người ký M thông báo được ký theo xâu bộ 8 Đầu ra: S Chữ ký, một xâu bộ 8 của độ dài k trong đó k là độ dài theo bộ 8 của RSA modulo n Các lỗi “Thông báo quá dài”; “Modulo RSA quá ngắn” Các bước thực hiện: 2.1.5.4. Xác thực chữ ký số RSASSA - PKCS1 - V1-5 - VERIFY ((n,e),M,S) Đầu vào: (n, e) khóa công khai RSA của người ký M thông báo (chữ ký số) cần xác thực theo xâu bộ 8 S Chữ ký cần xác thực là xâu bộ 8 độ dài k trong đó k là độ dài theo 8 bộ của RSA modulo n Đầu ra: “Chữ ký hợp lệ” hoặc “chữ ký không hợp lệ” Các lỗi: “Thông điệp quá dài”; “Modulo RSA quá ngắn” Các bước thực hiện:
1. Số mũ công khai e cần phải được chọn với các ràng buộc sau: 1. Kiểm tra p là một số nguyên tố lẻ. 1. Số mũ công khai e cần phải được chọn với các ràng buộc sau: 1. Kiểm tra p là một số nguyên tố lẻ.
a) Số mũ công khai e cần được chọn trước khi tạo số mũ bí mật d; a) Số mũ công khai e cần được chọn trước khi tạo số mũ bí mật d;
b) Số mũ công khai e cần phải là số nguyên dương lẻ sao cho Với nlen là độ dài của modulo n theo bit. Chú ý rằng e có thể là giá trị bất kỳ thỏa mãn ràng buộc 1(b); p và q sẽ được chọn (trong mục 2) sao cho e là nguyên tố cùng nhau với cả (p - 1) và (q - 1). b) Số mũ công khai e cần phải là số nguyên dương lẻ sao cho Với nlen là độ dài của modulo n theo bit. Chú ý rằng e có thể là giá trị bất kỳ thỏa mãn ràng buộc 1(b); p và q sẽ được chọn (trong mục 2) sao cho e là nguyên tố cùng nhau với cả (p - 1) và (q - 1).
2. Hai số nguyên tố p và q được tạo ngẫu nhiên và giữ bí mật cần phải được chọn với các ràng buộc sau: 2. Kiểm tra a, b, xG, yG là các phần tử của trường Fp. 2. Hai số nguyên tố p và q được tạo ngẫu nhiên và giữ bí mật cần phải được chọn với các ràng buộc sau: 2. Kiểm tra a, b, xG, yG là các phần tử của trường Fp.
a) (p - 1) và (q - 1) cần phải là nguyên tố cùng nhau với số mũ công khai e; a) (p - 1) và (q - 1) cần phải là nguyên tố cùng nhau với số mũ công khai e;
b) Mỗi một trong bốn số (p + 1), (p - 1) và (q + 1), (q - 1) cần phải có các nhân tử nguyên tố lớn hơn 2security-strength+20; b) Mỗi một trong bốn số (p + 1), (p - 1) và (q + 1), (q - 1) cần phải có các nhân tử nguyên tố lớn hơn 2security-strength+20;
d) |p - q| > 2(nlen/2-100). d) |p - q| > 2(nlen/2-100).
3. Số mũ bí mật d cần phải được lựa chọn sau khi tạo p và q với các ràng buộc: 3. Kiểm tra rằng a và b được dẫn xuất tương ứng từ SEED. 3. Số mũ bí mật d cần phải được lựa chọn sau khi tạo p và q với các ràng buộc: 3. Kiểm tra rằng a và b được dẫn xuất tương ứng từ SEED.
a) Số mũ d cần phải lớn hơn 2(nlen/2), và a) Số mũ d cần phải lớn hơn 2(nlen/2), và
b) d = e-1mod(LCM((p - 1), (q - 1))) (Chi tiết về hàm tạo các tham số RSA có thể tham khảo trong tài liệu FIPS 186-4: Digital Signature Standard). b) d = e-1mod(LCM((p - 1), (q - 1))) (Chi tiết về hàm tạo các tham số RSA có thể tham khảo trong tài liệu FIPS 186-4: Digital Signature Standard).
4. Kiểm tra (4a3 + 27b2) khác 0 và j(E) ≠ 0; 1728 trong Fp 4. Kiểm tra (4a3 + 27b2) khác 0 và j(E) ≠ 0; 1728 trong Fp
5. Kiểm tra trong Fp. 5. Kiểm tra trong Fp.
6. Kiểm tra n là nguyên tố và n > 4. 6. Kiểm tra n là nguyên tố và n > 4.
7. Kiểm tra nG = OE. 7. Kiểm tra nG = OE.
a) IDA và IDB sẽ được biểu diễn trong OtherInfo là hai đơn vị thông tin riêng rẽ. a) IDA và IDB sẽ được biểu diễn trong OtherInfo là hai đơn vị thông tin riêng rẽ.
b) Bên A sẽ là bên khởi tạo và bên B có thể là bên trả lời của giao thức sử dụng lược đồ thỏa thuận khóa được dùng để xác định khóa bí mật chia sẻ trước Z. b) Bên A sẽ là bên khởi tạo và bên B có thể là bên trả lời của giao thức sử dụng lược đồ thỏa thuận khóa được dùng để xác định khóa bí mật chia sẻ trước Z.
8. Kiểm tra đường cong có thuộc danh sách các đường cong yếu: a. Thỏa mãn điều kiện MOV, (chú ý rằng một đường cong thỏa mãn điều kiện MOV sẽ không phải là đường cong siêu biến). b. Kiểm tra đường cong không kì dị, nghĩa là #E ≠ p. Nếu bất kỳ sự kiểm tra nào ở trên thất bại thì tham số miền phải được xem là không hợp lệ. Các hệ số a,b của đường cong được sinh ngẫu nhiên trên Fp từ đầu vào SEED và có thể kiểm tra được. Khóa bí mật d phải được sinh ngẫu nhiên trong khoảng [1,n - 1]. Đường cong Elliptic xác định trên trường hữu hạn Fp với tối thiểu |p| = 224 bit và được xác định cụ thể như sau: Độ dài bit của n Độ dài bit của p 224 - 255 |p| = 224 256 - 383 |p| = 256 384 - 511 |p| = 384 ≥ 512 |p| = 521 Đại lượng Cofactor được định nghĩa và ký hiệu là h = #E(Fp)/n tuân theo bảng dưới đây: Độ dài bit của n Giá trị h cực đại cho phép 224 - 255 214 256 - 383 216 384 - 511 224 ≥ 512 232 8. Kiểm tra đường cong có thuộc danh sách các đường cong yếu: a. Thỏa mãn điều kiện MOV, (chú ý rằng một đường cong thỏa mãn điều kiện MOV sẽ không phải là đường cong siêu biến). b. Kiểm tra đường cong không kì dị, nghĩa là #E ≠ p. Nếu bất kỳ sự kiểm tra nào ở trên thất bại thì tham số miền phải được xem là không hợp lệ. Các hệ số a,b của đường cong được sinh ngẫu nhiên trên Fp từ đầu vào SEED và có thể kiểm tra được. Khóa bí mật d phải được sinh ngẫu nhiên trong khoảng [1,n - 1]. Đường cong Elliptic xác định trên trường hữu hạn Fp với tối thiểu |p| = 224 bit và được xác định cụ thể như sau: Độ dài bit của n Độ dài bit của p 224 - 255 |p| = 224 256 - 383 |p| = 256 384 - 511 |p| = 384 ≥ 512 |p| = 521 Đại lượng Cofactor được định nghĩa và ký hiệu là h = #E(Fp)/n tuân theo bảng dưới đây: Độ dài bit của n Giá trị h cực đại cho phép 224 - 255 214 256 - 383 216 384 - 511 224 ≥ 512 232
9. Trả về (r,s)
2.4.1 Hàm dẫn khóa 1 Dạng thức của KDF KDF(Z, Otherlnput) trong đó Otherlnput là keydatalen và OtherInfo (các đại lượng này được giải thích về sau). Các giá trị cố định: hashlen: số nguyên chỉ độ dài đầu ra (theo bit) của hàm băm được sử dụng để dẫn xuất ra các khối của dữ liệu khóa bí mật. max_hash_inputlen: số nguyên có giá trị là độ dài lớn nhất (theo bit) của (các) chuỗi bit đầu vào của hàm băm. Các hàm bổ trợ: H: là hàm băm được chấp thuận là hàm băm được quy định tại QCVN 5 : 2016/BQP Quy chuẩn kỹ thuật quốc gia về Chữ ký số sử dụng trong lĩnh vực ngân hàng. Đầu vào: Z: Chuỗi byte bí mật chia sẻ trước. keydatalen: số nguyên chỉ độ dài (theo bit) của dữ liệu khóa bí mật được sinh ra; keydatalen cần nhỏ hơn hoặc bằng Hashlen x (232 - 1) OtherInfo: Chuỗi bit sau: AlgorithmlD||PartyAInfo||PartyBInfo||SuppPubInfo||SuppPrivInfo} trong đó các trường con được định nghĩa như sau: - AlgorithmID: Chuỗi bit chỉ ra cách thức phân tách dữ liệu khóa đã được dẫn xuất ra và dữ liệu khóa được dẫn xuất sẽ được sử dụng cho những thuật toán nào. Ví dụ, AlgorithID có thể chỉ ra rằng các bit 1-80 được dùng là 80-bit khóa cho HMAC và các bit 81-208 được dùng là 128-bit khóa cho AES. - PartyAInfo: Một chuỗi bit chứa các thông tin công khai được yêu cầu bởi ứng dụng sử dụng hàm KDF được đóng góp bởi bên A trong quá trình dẫn xuất khóa, ở mức tối thiểu, PartyAInfo chứa IDA là định danh bên A. Xem chú ý phần dưới. - PartyBInfo: Một chuỗi bit chứa các thông tin công khai được yêu cầu bởi ứng dụng sử dụng hàm KDF được đóng góp bởi bên B trong quá trình dẫn xuất khóa, ở mức tối thiểu, PartyVInfo chứa IDB là định danh bên B. Xem chú ý phần dưới. - (Tùy chọn) SuppPubInfo: Một chuỗi bit chứa các thông tin công khai bổ sung cả hai bên cùng biết (mutual-known) - (Tùy chọn) SuppPrivInfo: Một chuỗi bit chứa thông tin bí mật bổ sung cả hai bên cùng biết (mutual-known) (Ví dụ, một khóa bí mật đối xứng chia sẻ trước được truyền thông qua một kênh riêng biệt) Thuật toán: 2.4.2. Hàm dẫn xuất khóa 2 Ký hiệu hashlen chỉ độ dài đầu ra của hàm hash được chọn và maxhashlen là độ dài đầu vào cực đại của hàm hash. Đầu vào Đầu vào của hàm dẫn xuất khóa là - Z Xâu bit là bí mật chia sẻ. CHÚ THÍCH: Giao thức thỏa thuận khóa sử dụng mật mã trên đường cong elliptic dẫn xuất ra khóa bí mật chia sẻ KAB hoặc dưới dạng một điểm trên đường cong elliptic hoặc dưới dạng ghép hai điểm. Trong trường hợp thứ nhất, để có được khóa mật chia sẻ Z làm đầu vào cho hàm dẫn xuất khóa thì phải áp dụng hàm p để chuyển điểm trên đường cong elliptic thành số nguyên và từ đó chuyển sang xâu bit. Trong trường hợp thứ hai áp dụng hàm p cho cả hai điểm để được hai số nguyên z1,z2; hai số nguyên này sau đó được biến đổi thành các xâu bít và được ghép lại với nhau. - Keydatalen số nguyên biểu thị độ dài tính bằng bit của dữ liệu khóa được tạo ra, nhỏ hơn đại lượng hashlen x (232 - 1) - (Tùy chọn) Xâu bit SharedInfor gồm một dữ liệu nào đó được hai thực thể dùng chung nhằm chia sẻ bí mật Z. Thuật toán Hàm dẫn xuất khóa được tính như sau: 2.4.1 Hàm dẫn khóa 1 Dạng thức của KDF KDF(Z, Otherlnput) trong đó Otherlnput là keydatalen và OtherInfo (các đại lượng này được giải thích về sau). Các giá trị cố định: hashlen: số nguyên chỉ độ dài đầu ra (theo bit) của hàm băm được sử dụng để dẫn xuất ra các khối của dữ liệu khóa bí mật. max_hash_inputlen: số nguyên có giá trị là độ dài lớn nhất (theo bit) của (các) chuỗi bit đầu vào của hàm băm. Các hàm bổ trợ: H: là hàm băm được chấp thuận là hàm băm được quy định tại QCVN 5 : 2016/BQP Quy chuẩn kỹ thuật quốc gia về Chữ ký số sử dụng trong lĩnh vực ngân hàng. Đầu vào: Z: Chuỗi byte bí mật chia sẻ trước. keydatalen: số nguyên chỉ độ dài (theo bit) của dữ liệu khóa bí mật được sinh ra; keydatalen cần nhỏ hơn hoặc bằng Hashlen x (232 - 1) OtherInfo: Chuỗi bit sau: AlgorithmlD||PartyAInfo||PartyBInfo||SuppPubInfo||SuppPrivInfo} trong đó các trường con được định nghĩa như sau: - AlgorithmID: Chuỗi bit chỉ ra cách thức phân tách dữ liệu khóa đã được dẫn xuất ra và dữ liệu khóa được dẫn xuất sẽ được sử dụng cho những thuật toán nào. Ví dụ, AlgorithID có thể chỉ ra rằng các bit 1-80 được dùng là 80-bit khóa cho HMAC và các bit 81-208 được dùng là 128-bit khóa cho AES. - PartyAInfo: Một chuỗi bit chứa các thông tin công khai được yêu cầu bởi ứng dụng sử dụng hàm KDF được đóng góp bởi bên A trong quá trình dẫn xuất khóa, ở mức tối thiểu, PartyAInfo chứa IDA là định danh bên A. Xem chú ý phần dưới. - PartyBInfo: Một chuỗi bit chứa các thông tin công khai được yêu cầu bởi ứng dụng sử dụng hàm KDF được đóng góp bởi bên B trong quá trình dẫn xuất khóa, ở mức tối thiểu, PartyVInfo chứa IDB là định danh bên B. Xem chú ý phần dưới. - (Tùy chọn) SuppPubInfo: Một chuỗi bit chứa các thông tin công khai bổ sung cả hai bên cùng biết (mutual-known) - (Tùy chọn) SuppPrivInfo: Một chuỗi bit chứa thông tin bí mật bổ sung cả hai bên cùng biết (mutual-known) (Ví dụ, một khóa bí mật đối xứng chia sẻ trước được truyền thông qua một kênh riêng biệt) Thuật toán: 2.4.2. Hàm dẫn xuất khóa 2 Ký hiệu hashlen chỉ độ dài đầu ra của hàm hash được chọn và maxhashlen là độ dài đầu vào cực đại của hàm hash. Đầu vào Đầu vào của hàm dẫn xuất khóa là - Z Xâu bit là bí mật chia sẻ. CHÚ THÍCH: Giao thức thỏa thuận khóa sử dụng mật mã trên đường cong elliptic dẫn xuất ra khóa bí mật chia sẻ KAB hoặc dưới dạng một điểm trên đường cong elliptic hoặc dưới dạng ghép hai điểm. Trong trường hợp thứ nhất, để có được khóa mật chia sẻ Z làm đầu vào cho hàm dẫn xuất khóa thì phải áp dụng hàm p để chuyển điểm trên đường cong elliptic thành số nguyên và từ đó chuyển sang xâu bit. Trong trường hợp thứ hai áp dụng hàm p cho cả hai điểm để được hai số nguyên z1,z2; hai số nguyên này sau đó được biến đổi thành các xâu bít và được ghép lại với nhau. - Keydatalen số nguyên biểu thị độ dài tính bằng bit của dữ liệu khóa được tạo ra, nhỏ hơn đại lượng hashlen x (232 - 1) - (Tùy chọn) Xâu bit SharedInfor gồm một dữ liệu nào đó được hai thực thể dùng chung nhằm chia sẻ bí mật Z. Thuật toán Hàm dẫn xuất khóa được tính như sau:
5.1. Tính Hashi = H(counter||Z||OtherInfo ). 5.1. Tính Hashi = H(counter||Z||OtherInfo ).
5.2. Tăng counter lên 1 (modulo 232), xử lý nó dưới dạng số nguyên không âm 32-bit. 5.2. Tăng counter lên 1 (modulo 232), xử lý nó dưới dạng số nguyên không âm 32-bit.
2.6.1. Giao thức vận chuyển khóa công khai không sử dụng bên thứ ba tin cậy Giao thức gồm bốn bước và được minh họa trên Hình 3. Hình 3: Cơ chế vận chuyển khóa công khai Bước 1. Kiến thiết thẻ khóa (A1): A tạo ra một thẻ khóa KTA1 bao gồm thông tin khóa công khai của A và gửi đến cho B: KTA1 = PKIA || Text1 Bước 2. Tiếp nhận thẻ khóa (B1): B tiếp nhận được thẻ khóa, trích lấy thông tin khóa công khai PKIA. Hoặc B sẽ thực hiện kiểm tra khóa kiểm tra của A hoặc sẽ lưu trữ nó ở nơi tránh được giả mạo phục vụ để cho lần kiểm tra sau hoặc sẽ sử dụng. Bước 3. Kiến tạo thẻ kiểm tra (A2): A tính toán giá trị kiểm tra hash(PKIA) đối với thông tin khóa công khai của mình và gửi giá trị kiểm tra này cùng với các định danh tùy chọn riêng biệt của A và B rồi gửi đến thực thể B sử dụng một kênh truyền có xác thực và độc lập thứ hai (ví dụ kênh truyền điện báo hoặc đường truyền thư đăng ký trước). KTA2 = A || B || hash(PKIA) || Text2 Bước 4. Kiểm tra thẻ khóa (B2): Dựa vào thông tin thẻ khóa nhận được KTA2, B có thể tùy chọn kiểm tra định danh riêng biệt của A và B, tính toán ra giá trị kiểm tra trên thông tin khóa công khai của A nhận được từ thẻ khóa KTA1 và so sánh với giá trị kiểm tra nhận được từ thẻ khóa KTA2. Nếu kết quả kiểm tra thành công thì B lấy khóa công khai của A đưa lên danh sách các khóa đang hoạt động (danh sách này được bảo vệ chống lại sự giả mạo). 2.6.2. Giao thức vận chuyển khóa công khai sử dụng bên thứ ba tin cậy Giao thức gồm hai bước và được minh họa trên Hình 4. Hình 4 - Cơ chế vận chuyển khóa công khai 2 Bước 1. Kiến thiết thẻ khóa (A1): Thực thể A tạo ra một thẻ khóa KTA bao gồm chứng chỉ khóa công khai của A và gửi nó cho B: KTA = CertA || Text Bước 2. Kiểm tra chứng chỉ (B1): Dựa trên thông tin nhận được về chứng chỉ khóa công khai, B sử dụng phép kiểm tra công khai VCA của CA để kiểm tra tính xác thực của thông tin khóa công khai và kiểm tra cả tính hợp lệ đối với khóa công khai của A. 2.6.1. Giao thức vận chuyển khóa công khai không sử dụng bên thứ ba tin cậy Giao thức gồm bốn bước và được minh họa trên Hình 3. Hình 3: Cơ chế vận chuyển khóa công khai Bước 1. Kiến thiết thẻ khóa (A1): A tạo ra một thẻ khóa KTA1 bao gồm thông tin khóa công khai của A và gửi đến cho B: KTA1 = PKIA || Text1 Bước 2. Tiếp nhận thẻ khóa (B1): B tiếp nhận được thẻ khóa, trích lấy thông tin khóa công khai PKIA. Hoặc B sẽ thực hiện kiểm tra khóa kiểm tra của A hoặc sẽ lưu trữ nó ở nơi tránh được giả mạo phục vụ để cho lần kiểm tra sau hoặc sẽ sử dụng. Bước 3. Kiến tạo thẻ kiểm tra (A2): A tính toán giá trị kiểm tra hash(PKIA) đối với thông tin khóa công khai của mình và gửi giá trị kiểm tra này cùng với các định danh tùy chọn riêng biệt của A và B rồi gửi đến thực thể B sử dụng một kênh truyền có xác thực và độc lập thứ hai (ví dụ kênh truyền điện báo hoặc đường truyền thư đăng ký trước). KTA2 = A || B || hash(PKIA) || Text2 Bước 4. Kiểm tra thẻ khóa (B2): Dựa vào thông tin thẻ khóa nhận được KTA2, B có thể tùy chọn kiểm tra định danh riêng biệt của A và B, tính toán ra giá trị kiểm tra trên thông tin khóa công khai của A nhận được từ thẻ khóa KTA1 và so sánh với giá trị kiểm tra nhận được từ thẻ khóa KTA2. Nếu kết quả kiểm tra thành công thì B lấy khóa công khai của A đưa lên danh sách các khóa đang hoạt động (danh sách này được bảo vệ chống lại sự giả mạo). 2.6.2. Giao thức vận chuyển khóa công khai sử dụng bên thứ ba tin cậy Giao thức gồm hai bước và được minh họa trên Hình 4. Hình 4 - Cơ chế vận chuyển khóa công khai 2 Bước 1. Kiến thiết thẻ khóa (A1): Thực thể A tạo ra một thẻ khóa KTA bao gồm chứng chỉ khóa công khai của A và gửi nó cho B: KTA = CertA || Text Bước 2. Kiểm tra chứng chỉ (B1): Dựa trên thông tin nhận được về chứng chỉ khóa công khai, B sử dụng phép kiểm tra công khai VCA của CA để kiểm tra tính xác thực của thông tin khóa công khai và kiểm tra cả tính hợp lệ đối với khóa công khai của A.
2.7.1. Quy định về nguồn ngẫu nhiên Các số ngẫu nhiên được sử dụng cho các mục đích khác nhau như để sinh các tham số mật mã, các khóa mật mã, các giá trị ngẫu nhiên dùng một lần và các giá trị thách đố xác thực. Một số bộ sinh bit ngẫu nhiên tất định DRBG được chấp thuận để sử dụng theo quy định chung bao gồm: HASH_DRBG, HMAC_DRBG và CTR_DRBG. Các bộ sinh bit ngẫu nhiên RBG tuân theo SP800-90A phiên bản sửa đổi lại năm 2015 để sinh bit ngẫu nhiên cũng được chấp thuận để sử dụng tiếp. 2.7.2. Quy định đối với tham số RSA 2.7.2.1. Các yêu cầu chung 2.7.2.2. Quy định ngưỡng giá trị cho tham số theo thời hạn sử dụng Thời hạn Quy định RSA 2020 |p| = 1536 2030 |p| = 2048 Sau 2030 |p| = 3072 2.7.3. Hệ mật dựa trên Logarit rời rạc DL Tham số của hệ mật dựa trên bài toán Logarit rời rạc trên trường hữu hạn Fp là bộ: (p,q,g), trong đó p là đặc số của trường Fp, q là bậc của nhóm F*(p) và là ước của p - 1 thỏa mãn các điều kiện sau: - p, q là số nguyên tố - Độ dài của p, q được cho dưới bảng sau: Năm Độ dài p Độ dài q Đến 2020 |p| = 1536 ||q|| = 192 Đến 2030 |p| = 2048 ||q|| = 224 Sau năm 2030 |p| = 3072 ||q|| = 256 2.7.4. Hệ mật ECC 2.7.4.1 Quy định về các khóa Kiểm tra tính hợp lệ của các tham số miền (p, SEED, a, b, G, n, h) như sau: Xâu SEED dùng để sinh ngẫu nhiên đường cong Elliptic xác định trên trường Fp với p là số nguyên tố lẻ. Trước khi sử dụng một bộ tham số miền, tính hợp lệ của nó phải được kiểm tra theo thuật toán dưới đây: 2.7.5. Độ an toàn theo bit quy đổi giữa RSA, DL và ECC Độ an toàn ECC RSA DL 112 224 2048 2048 128 256 3072 3072 192 384 7680 7680 256 512 15360 15360 2.7.1. Quy định về nguồn ngẫu nhiên Các số ngẫu nhiên được sử dụng cho các mục đích khác nhau như để sinh các tham số mật mã, các khóa mật mã, các giá trị ngẫu nhiên dùng một lần và các giá trị thách đố xác thực. Một số bộ sinh bit ngẫu nhiên tất định DRBG được chấp thuận để sử dụng theo quy định chung bao gồm: HASH_DRBG, HMAC_DRBG và CTR_DRBG. Các bộ sinh bit ngẫu nhiên RBG tuân theo SP800-90A phiên bản sửa đổi lại năm 2015 để sinh bit ngẫu nhiên cũng được chấp thuận để sử dụng tiếp. 2.7.2. Quy định đối với tham số RSA 2.7.2.1. Các yêu cầu chung 2.7.2.2. Quy định ngưỡng giá trị cho tham số theo thời hạn sử dụng Thời hạn Quy định RSA 2020 |p| = 1536 2030 |p| = 2048 Sau 2030 |p| = 3072 2.7.3. Hệ mật dựa trên Logarit rời rạc DL Tham số của hệ mật dựa trên bài toán Logarit rời rạc trên trường hữu hạn Fp là bộ: (p,q,g), trong đó p là đặc số của trường Fp, q là bậc của nhóm F*(p) và là ước của p - 1 thỏa mãn các điều kiện sau: - p, q là số nguyên tố - Độ dài của p, q được cho dưới bảng sau: Năm Độ dài p Độ dài q Đến 2020 |p| = 1536 ||q|| = 192 Đến 2030 |p| = 2048 ||q|| = 224 Sau năm 2030 |p| = 3072 ||q|| = 256 2.7.4. Hệ mật ECC 2.7.4.1 Quy định về các khóa Kiểm tra tính hợp lệ của các tham số miền (p, SEED, a, b, G, n, h) như sau: Xâu SEED dùng để sinh ngẫu nhiên đường cong Elliptic xác định trên trường Fp với p là số nguyên tố lẻ. Trước khi sử dụng một bộ tham số miền, tính hợp lệ của nó phải được kiểm tra theo thuật toán dưới đây: 2.7.5. Độ an toàn theo bit quy đổi giữa RSA, DL và ECC Độ an toàn ECC RSA DL 112 224 2048 2048 128 256 3072 3072 192 384 7680 7680 256 512 15360 15360