Gửi lúc: 17/06/2019 15:15:52
Bookmark and Share

Công nghệ phân tách khóa

Công nghệ phân tách khóa - SplitKey là công nghệ tích hợp chữ ký số, xác thực mật mã thực sự cho các thiết bị thông minh (iOS, Android), mà không làm giảm mức an toàn đặc trưng đối với các nền tảng phần cứng chuyên dụng như thẻ thông minh hoặc module bảo mật phần cứng. SplitKey có thể được coi là một giải pháp ký số và xác thực kết hợp các ưu điểm của cả các thẻ mật mã phần cứng và các thẻ mềm. Bài viết này giới thiệu và phân tích các thành phần mật mã, giải thích các công thức và các nguyên tắc toán học của các hoạt động mật mã, đồng thời đưa ra khái niệm về an toàn thông tin nhằm hỗ trợ việc đánh giá độ an toàn của nền tảng chữ ký số, xác thực của công nghệ SplitKey.

Các thực thể tham gia trong công nghệ Splitkey

Có hai thực thể tham gia trong công nghệ SplitKey. Thực thể đầu tiên là Client, dùng để khởi tạo các hoạt động thông qua việc sử dụng thiết bị thông minh thương mại. Theo các điều luật và các tiêu chuẩn, Client là chủ sở hữu duy nhất của khóa cuối cùng đầy đủ trong công nghệ SplitKey. Tuy nhiên, Client không phải tin tưởng vô điều kiện vào cơ sở hạ tầng, mà có sự kiểm soát thực sự đối với khóa của mình.

Thực thể thứ hai là cơ sở hạ tầng của nhà cung cấp dịch vụ. Vì các lý do rõ ràng, tổng hợp tất cả sự phức tạp về mặt giấy tờ hiện tại của các hệ thống có sẵn về phía nhà cung cấp dịch vụ được biết đến như một Server.

Vai trò quan trọng nhất về phía Server là thực thi các công nghệ ở mức cao như các module phần cứng bảo mật (HSM - Hardware Security Module) nhằm hỗ trợ Client thực hiện quyền kiểm soát duy nhất với khóa riêng của mình. Đây là nhiệm vụ của Server nhằm thiết lập sự đảm bảo, tin cậy và kiểm toán, điều mà thiết bị thông minh thương mại không có khả năng đạt được một cách độc lập.

Cơ sở mật mã

SplitKey có thể được xem như một kiến trúc thượng tầng đối với thuật toán RSA tiêu chuẩn, khóa riêng cuối cùng đầy đủ d là một khóa ghép của nhiều số nguyên tố tự nhiên. Tuy nhiên, theo mục tiêu thiết kế của công nghệ SplitKey, các thành phần của khóa ảo d không bao giờ được thu thập cùng nhau. Khóa riêng d đầy đủ hiện tại có độ dài 6 Kibit (6144 bit).

Khóa riêng ảo d có thể được mô tả có một đường cắt dọc tại điểm chia tách. Trong thực tế, khóa này được xây dựng từ dưới lên – các nửa khóa được sinh bởi các bên riêng biệt.

Nửa khóa đầu tiên d1 được sinh bởi Client trong khi nửa khóa thứ hai d2 được sinh bởi Server, như mô tả trong Hình 1. Cả hai khóa có độ dài 3 Kibit (3072 bit).

 

Hình 1. Sự phân tách khóa đầu tiên

Thay vì đặt hai nửa khóa lại cùng với nhau, các hoạt động khóa có ý nghĩa được tiến hành một cách riêng biệt theo một cách tuần tự đối với cả hai nửa khóa. Do đặc tính toán học của RSA đa nguyên tố, kết quả là tương đương với các hoạt động của khóa đầy đủ cuối cùng.

Công nghệ SplitKey cũng cung cấp cơ chế phân tách thứ hai, sự phân tách phức tạp hơn về mặt công nghệ được áp dụng cho nửa khóa d1. Đây là sự chia tách thực sự dựa trên phép cộng modulo hàm Euler. Sự chia tách thứ hai có thể được mô tả rõ hơn như trong Hình 2, do trong thực tế kết quả các khóa d’1d”1 đều có độ dài 3 Kibit.

 

Hình 2. Sự phân tách khóa thứ hai

Tóm lại, toàn bộ khóa riêng d là ảo và được mô tả như trong Hình 3, có thể được xem như tổ hợp của của các phần d’1, d”1d2.

 

Hình 3. Cả hai sự phân tách với các vị trí lưu trữ được đánh dấu

Sinh khóa

Nguyên tắc chung

Phần này sẽ giới thiệu ý nghĩa của các đối tượng và làm rõ thuật toán dùng để phân tách nửa khóa d1. Đây chính là phần thú vị nhất trong toàn bộ khung hình chung của công nghệ SplitKey.

Khóa riêng RSA của Client là d (còn gọi là khóa được kết hợp, hoặc khóa đầy đủ, hoặc khóa cuối cùng). Tuy nhiên, điều nghịch lý là khóa này không bao giờ tham gia vào các tính toán mật mã, cũng không tồn tại dưới dạng bằng chứng, bởi vậy kẻ tấn công không thể lấy được trực tiếp khóa d. Các hàm với d được hỗ trợ một cách gián tiếp, thông qua các tính toán toán học.

Phần d1 của khóa RSA đầy đủ được sinh tại phía Client. Phần d2 được sinh ở phía Server (phía cơ sở hạ tầng), bởi vậy nó không thể bị thu được khi tấn công ở phía Client. Kết quả là, để có được khóa riêng đầy đủ, kẻ tấn công cần thỏa hiệp cả hai phía Client và Server, đây là sự kiện rất khó xảy ra.

Cùng với các khóa riêng, các khóa công khai cũng được tạo ra theo các yêu cầu của hệ thống mật mã RSA. Khóa công khai đầy đủ của khách hàng cuối cùng là chứng thư số của Client.

Ký hiệu của các khóa công khai là tương tự nhau. Phần khóa công khai của Client được ký hiệu là n1 và nó được chuẩn bị bởi Client. Phần khóa công khai Server được ký hiệu là n2 và được tạo bởi thực thể cơ sở hạ tầng. Khóa công khai đầy đủ n gồm hai nửa khóa n1 = p1 q1n2 = p2 q2. Khóa công khai đầy đủ là tích của bốn số nguyên tố n = p1 q1 p2 q2.

Một thuộc tính quan trọng của công nghệ SplitKey là phép biến đổi được chọn để phân tách phần khóa của Client theo quá trình khởi tạo ban đầu của nó. Với mục đích đó, một số phép toán bổ sung được áp dụng trên khóa riêng d1 (mặc dù không được áp dụng trên thành phần công khai n1). Lý do phân tách khóa d1 để phân chia khóa giữa hai thực thể sao cho d’1 sẽ được lưu trữ ở phía Client và d”1 được lưu trữ ở phía Server.

Chúng ta sử dụng một ký hiệu toán học đơn giản, đánh dấu sự phân tách d1=d’1 d”1. Với ký hiệu trên, khóa d’1 có thể được tính d’1=d1Ɵd”1.

Đầu tiên, một giá trị ngẫu nhiên có độ dài xác định trước (3 Kibit) được yêu cầu từ bộ sinh số ngẫu nhiên, được sử dụng như là d”1. Chuỗi bít nhận được trước đó (khóa riêng d1) rõ ràng sở hữu chất lượng ngẫu nhiên yếu. Nhiệm vụ được giải quyết bằng cách phân tách d1 thành hai thành phần ngẫu nhiên tốt hơn là d’1d”1.

Ở phía Client, các biện pháp bổ sung được thực hiện để che dấu giá trị d’1 khỏi những kẻ tấn công, bởi vậy nó sẽ được lưu trữ sau khi đã được mã hóa bởi thuật toán AES. Do đó, sau đó để có thể sử dụng nó cần cung cấp một mã PIN.

Thành phần d”1 sẽ được gửi đến Server và được lưu trữ trong HSM. Tổng modulo d1=d’1 d”1 là trung thực trong khi hai thành phần được bổ sung tính ngẫu nhiên và được lưu trữ ở các bên khác nhau, do đó cơ hội để kẻ tấn công thành công trở nên nhỏ hơn. Lúc này, việc thỏa hiệp để có nửa khóa riêng d1 là cực kỳ khó khăn do những nỗ lực được cung cấp bởi thiết kế, xây dựng và kiểm toán của bên cung cấp Sever.

Bước cuối cùng nhưng không kém phần quan trọng đó là tài liệu hoặc giao dịch sẽ được ký phải được xác định trước khi ký. Do các hạn chế đã biết đối với hệ thống mật mã RSA (tốc độ, các yêu cầu), đầu vào thực của phép ký sẽ là thông điệp m nhận được thông qua việc băm tài liệu D (ví dụ bằng cách áp dụng hàm băm cho đầu ra 256 bit) sau đó bổ sung thao tác đệm giá trị băm cho tương xứng với khóa 6 Kibit dự định ký.

Trên đây là tổng quan về các thành tố mật mã trong ngữ cảnh tĩnh, cũng như việc giải thích về các mục đích của chúng. Phần tiếp theo trình bày tổng quan trong ngữ cảnh động sẽ giải thích các hoạt động cơ bản của các yếu tố trên.

Tạo khóa: ký hiệu động

Để triển khai hợp pháp, các khóa không được tồn tại một cách cô lập mà được dùng cùng với các chứng thư cá nhân. Theo các tiêu chuẩn, chứng thư hình thành từ khóa công khai của chủ sở hữu và một số dữ liệu bổ sung, sau đó được ký mật mã bởi bên thứ ba, thường là CA (Certificate Authority).

Việc tạo một chứng thư mới bao gồm nhiều công đoạn như: việc sinh thực các khóa, phân tách theo yêu cầu của công nghệ SplitKey, cuối cùng là chứng nhận và công bố khóa công khai tại CA.

Công đoạn tạo khóa

Tạo các khóa mới là một hoạt động có tầm quan trọng tối cao, vì một định danh mới sẽ được tạo. Do đó, Client được yêu cầu xác thực trước mỗi lần thực hiện. Quy trình làm việc cụ thể như sau:

• Client khởi tạo việc tạo khóa qua giao diện đồ họa người dùng (GUI)

• Hoạt động tạo khóa RSA tiêu chuẩn được thực hiện để có khóa công khai n1 cùng khóa riêng d1, cả hai đều có độ dài 3 Kibit.

• Client chuyển thành phần n1 của khóa mới sinh cho Server.

• Song song với đó, Server khởi chạy tác vụ tạo khóa RSA độc lập để có cặp khóa n2d2 đều có độ dài 3Kibit.

Ở phía Server, các khóa được lưu bên trong HSM.

Công đoạn phân tách khóa

• Client sẽ tính toán lại d1 thành hai thành phần d’1d’’1 theo cách đã trình bày ở trên.

• Thành phần d’1 sẽ được khách hàng lưu trữ tại hệ thống tệp của mình (sau khi đã mã hóa).

• Thành phần d’’1 sẽ được chuyển cho Server thông qua kênh an toàn.

• Thành phần được chuyển d’’1  được đánh dấu cho xóa sau này.

• Nửa khóa ban đầu d1 được đánh dấu để xóa sau này.

Kết quả của việc phân tách sẽ thể hiện một ý nghĩa toán học khi thực hiện các hoạt động ký. Lúc đó các thành phần d’1d’’1 trong giống như các chuỗi bit ngẫu nhiên.

Công đoạn chứng nhận

Để đưa khóa được tạo mới vào hệ thống tin cậy, trước tiên cặp khóa phải được liên kết với định danh người dùng. Kết quả của công đoạn chứng nhận là một định danh mới - một chứng thư trong hệ thống nhà cung cấp dịch vụ.

Các hoạt động dưới đây như là một sự tiếp nối của quá trình tạo khóa:

• Server chuẩn bị các thành phần cần thiết cho chứng thư, như khóa ông khai n1 nhận được từ Client và n2 của chính nó.

• Server khởi tạo một yêu cầu phát hành chữ ký (CSR – Certificate Signing Request). Dựa trên định danh được chứng thực, một CSR bao gồm:

- Định danh của người được cấp chứng thư.

- Cơ quan đăng ký (RA – Registration Authority) hoặc các phương pháp khác.

- Khóa công khai đầy đủ n.

- Nhãn thời gian.

- Định nghĩa chính sách chứng thư.

- URL liên kết danh sách chứng thư bị hủy bỏ (CRL – Certificate Revocation List)

• Sau khi cung cấp đầy đủ các yêu cầu Server sẽ liên hệ với CA và nộp yêu cầu cấp phát chứng thư.

• Kết quả một chứng thư cá nhân mới được trả về từ CA và được lưu trữ an toàn trên Server.

• Server tạo nhật ký kiểm toán có liên quan về sự kiện trên.


Ký số

Như đã trình bày ở trên, khóa riêng đầy đủ được phân chia giữa Client và nhà cung cấp dịch vụ. Tính hữu dụng của công nghệ SplitKey chính là việc mà cả hai bên sẽ ký thông điệp m tách biệt hoàn toàn với nhau sau đó sẽ sử dụng phép tính toán học để hình thành một chữ ký đầy đủ.

Chuẩn bị đầu vào

Bên uỷ quyền (RP - Relying Party) trong thỏa thuận pháp lý với nhà cung cấp dịch vụ, có thể cung cấp tài liệu hoặc các giao dịch được ký bởi Client. RP sở hữu bản gốc tài liệu hoặc giao dịch.

Tiếp theo,

• RP tính toán giá trị băm H từ giao dịch hoặc tài liệu và chuyển nó tới Server.

• Server đệm giá trị băm H thành thông điệp được ký m. Độ dài của thông điệp được đệm tương xứng với kích thước 6 Kibit của modulo đầy đủ.

• Server sẽ truyền thông thông điệp đã được đệm m đến Client.

Ký thông điệp

Quy trình hiện tại được giả thiết rằng tài liệu hoặc giao dịch sẽ được ký có nguồn gốc từ RP đáng tin cậy, ví dụ một ngân hàng hoặc một cổng dịch vụ. Về mặt kỹ thuật có thể có 1 biến tài liệu được ký được lưu trong hệ thống tệp của Client.

Tạo các chữ ký con

Server và Client sẽ độc lập tiến hành tính toán các chữ ký tương ứng. Cả hai chỉ có thể tính toán phần chữ ký dựa trên các khóa con d’1d’’1 mà mỗi bên sở hữu tương ứng.

Thành phần phân tách của Client

• Client giải mã khóa d’1 sử dụng số định danh các nhân (PIN – Personal Identify Number) . Việc sử dụng lược đồ mã hóa dựa trên mật khẩu (PBE – Password Based Encryption) với thuật toán AES được sử dụng thì bản mã luôn được giải mã ngay cả với PIN không chính xác, bởi vậy kẻ tấn công không thể biết khi nào thì giải mã là thành công.

• Client thực hiện tạo phần chữ ký bởi công thức m^d’1mod n1. Nếu PIN là không đúng, thì d’1 cũng không đúng. Nếu như vậy, các hoạt động tiếp theo là không có ý nghĩa, mặc dù có thể thành công về mặt kỹ thuật. 

Thành phần phân tách của Server

• Server nhận khóa con d’’1 được lưu trữ an toàn trên HSM và chỉ có thể sử dụng dựa trên yêu cầu của Client. Bất kỳ việc sử dụng khóa nào cũng được ghi nhật ký và kiểm toán nghiêm ngặt.

Hình ảnh

• Server tính toán thành phần thứ hai của chữ ký m^d’’1mod n1.

Tổng hợp chữ ký từ các thành phần phân tách

Chữ ký tổng hợp từ các hành phần phân tách được tính như sau:

m^d’1m^d’’1mod n1= m^(d’1+d’’1) mod n1=m^d1 mod n1.

Server sở hữu cả hai thành phần chữ ký con nên có thể áp dụng phép kiểm tra RSA (m^d1)^e mod n1 =m để kiểm tra tính chính xác của mã PIN mà Client đã cung cấp từ đó chứng tỏ rằng Client có khả năng kiểm soát hoàn toàn khóa bí mật của mình.

Hình thành chữ ký đầy đủ

Qua việc kiểm tra Server có thể khẳng định tính chính xác của nửa chữ ký. Nửa thứ hai của chữ ký được đảm bảo và tính toán bởi bản thân máy chủ: m^d2 mod n2.

Sau khi tính nửa chữ ký thứ hai, Server sử dụng định lý phần dư Trung Hoa (CRT – Chinese Reminder Theorem) để thực hiện tính toán chữ ký đầy đủ m^d mod n từ hai nửa chữ ký đã có: m^d1 mod n1 m^d2 mod n2.

Cần nhớ rằng khóa riêng d chưa từng tồn tại và không bao giờ được lưu trữ.

Kiểm tra chữ ký

Hoạt động kiểm tra công khai chữ ký là có thể thực hiện vì khóa công khai được công bố như một phần của chứng thư số bởi cơ sở hạ tầng khóa công khai (PKI – Public Key Infrastructure).

Kết luận

Bài viết đã mô tả và phân tích các thành phần và các hoạt động mật mã trong công nghệ SplitKey. Trong các hệ thống hiện đại có xu hướng tạo hai cặp khóa, một sử dụng cho mục đích xác thực, một sử dụng cho mục đích chữ ký số. Với công nghệ SplitKey có thể thực thi được cả hai mục đích trên.

Tài liệu tham khảo

1. SplitKey Authentication and Digital Signature Platform of Cybernetica, April 12, 2018.

2. Introduction to SplitKey Foundations White paper of Cybernetica, April 12, 2018.

TS. Hoàng Văn Thức (Viện Khoa học - Công nghệ mật mã)