Mật mã khóa công khai và chữ ký số

Các kỹ thuật mật mã đã được sử dụng trong hàng ngàn năm trước đây, trước cả khi máy tính ra đời. Trải qua hàng ngàn năm phát triển mật mã đã có những bước tiến quan trọng có ứng dụng trong mọi mặt của đời sống nói chung và blockchain nói riêng. Và mật mã khóa công khai, hay mật mã bất đối xứng là một trong những bước tiến có ứng dụng quan trọng nhất trong mật mã học.

Mật mã khóa công khai sử dụng cặp khóa chung và khóa riêng để mã hóa và giải mã dữ liệu. Khóa chung có thể được chia sẻ với mọi người và được gọi là khóa công khai. Khóa riêng được giữ bí mật và chỉ riêng chủ sở hữu biết. Một trong hai khóa có thể được sử dụng để mã hóa và khi đó khóa còn lại được sử dụng để giải mã. Hai khóa này khác nhau và từ một khóa không thể (hoặc rất khó) suy ra được khóa còn lại.

Việc tạo ra các cặp khóa như vậy phụ thuộc vào các thuật toán mã hóa dựa trên các bài toán toán học rất khó để tạo ra các hàm một chiều. Tính an toàn của hệ mật khóa công khai dựa trên việc bảo vệ tính bí mật của khóa riêng; khóa công khai có thể được phân phối công khai mà không ảnh hưởng đến tính an toàn của hệ mật. Độ mạnh của thuật toán mã hóa gắn liền với kích thước khóa. Việc tăng gấp đôi độ dài khóa có thể làm tăng độ mạnh của hệ mật theo cấp số nhân.

Các hệ mật mã khóa công khai là các thành phần cơ bản trong các hệ thống, ứng dụng và giao thức tiền điện tử hiện đại giúp đảm bảo tính bí mật, tính xác thực và chống chối bỏ trong việc truyền tải và lưu trữ dữ liệu. Chúng là nền tảng cho nhiều giao thức trên Internet, như SSL/TLS, S/MIME, SSH  PGP, hay GPG. Một số thuật toán khóa công khai ứng dụng trong việc phân phối khóa bí mật (giao thức trao đổi khóa Diffie–Hellman), hay chữ ký số (RSA, ECC).

Nó cũng được sử dụng trong rất nhiều các chương trình phần mềm, chẳng hạn như trình duyệt, khi cần thiết lập kết nối an toàn qua mạng Internet hoặc cần xác thực chữ ký số.

Để đảm bảo 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ỏ trên hệ mật mã khóa công khai, thì người dùng và hệ thống cần chắc chắn rằng khóa công khai là xác thực, thuộc về một cá nhân hoặc tổ chức được tuyên bố và nó không bị giả mạo hay thay thế bởi bên thứ ba độc hại. Không có giải pháp hoàn hảo cho vấn đề xác thực khóa công khai này. Một trong những giải pháp có thể được áp dụng là sử dụng Cơ sở hạ tầng khóa công khai (PKI). Đây là cách tiếp cận phổ biến nhất trong đó sử dụng các cơ quan cấp chứng chỉ tin cậy xác nhận quyền sở hữu các cặp và chứng chỉ khóa của người dùng. Một cách tiếp cận khác trong vấn đề này là sử dụng mô hình xác thực phi tập trung, chứng thực người dùng dựa trên sự liên kết giữa người dùng và khóa công khai tương ứng của họ. Mô hình này được sử dụng trong các sản phẩm mã hóa dựa trên mô hình PGP (Pretty Good Privacy) như OpenPGP hay trong các mô hình public blockchain truyền thống như Bitcoin hay Ethereum...

Ví dụ về hệ mật mã khóa công khai

Hệ mật mã khóa công khai được xây dựng dựa trên độ khó của các bài toán số học. Có rất nhiều các dạng bài toán khó có thể được sử dụng để xây dựng các hệ mật khóa công khai. Trong đó, được sử dụng phổ biến nhất hiện nay là hệ mật RSA (Rivest-Shamir-Adeld). RSA là thuật toán mã hóa khóa công khai được sử dụng rộng rãi nhất hiện nay. Nó được nhúng trong các giao thức SSL/TSL được sử dụng để đảm bảo tính bí mật cho các liên lạc qua mạng máy tính.

RSA được xây dựng dựa trên độ khó của bài toán phân tích số nguyên thành tích hai số nguyên tố lớn.

Để nhân hai số nguyên tố (dù có lớn đi nữa) là một việc rất dễ dàng và cho kết quả cực nhanh, nhưng việc tìm lại đúng 2 số nguyên tố có tích là một số nào đó thì cực kỳ khó khăn và tốn tài nguyên. Chẳng hạn, chúng ta rất dễ dàng để tính 3x5=15 chỉ bằng một phép tính, nhưng sẽ phải vét cạn và cố gắng phân tích số 15 thành 3x5 bằng rất nhiều phép tính khác nhau. Và với các số cực lớn thì càng khó khăn gấp bội. Độ dài của các số này hiện nay được sử dụng là 1024 hoặc 2048 bit, và thời gian theo lý thuyết cần thiết để tính được với kích thước này có thể lên đến hàng ngàn năm ngay cả với các siêu máy tính mạnh nhất hiện nay. Tuy nhiên, trong nhiều nghiên cứu về năng lực tính toán, các chuyên gia cho rằng các khóa 1024 bit có thể bị phá vỡ trong tương lại gần. Đó là lý do tại sao tiêu chuẩn khóa công khai của các chính phủ và tổ chức công nghiệp hiện nay đang chuyển sang độ dài khóa tối thiểu là 2048 bit.

Một ví dụ khác về hệ mật mã khóa công khai cũng thường đang được sử dụng, đặc biệt là trong các hệ thống blockchain và tiền mã hóa hiện nay là các hệ mật mã dựa trên đường cong Elliptic (ECC). Đây là hệ mật mã khóa công khai đang được nhiều chuyên gia bảo mật ưu tiên thay thế cho RSA.

ECC là một kỹ thuật mã hóa khóa công khai dựa trên lý thuyết đường cong elliptic có thể tạo ra các khóa mật mã nhanh hơn, nhỏ hơn và hiệu quả hơn. ECC tạo các khóa thông qua các thuộc tính của phương trình đường cong elliptic.

Để phá vỡ ECC, người ta phải tính toán bài toán logarit rời rạc trên đường cong elliptic và trên thực tế đây là một vấn đề cực kỳ khó khăn thậm chí hơn cả bài toán phân tích số nguyên tố. Do đó, kích thước khóa của ECC có thể nhỏ hơn đáng kể so với yêu cầu của RSA nhưng vẫn đảm bảo được độ an toàn tương đương với chi phí và tài nguyên tính toán thấp hơn. Điều này khiến nó phù hợp hơn cho các ứng dụng di động hoặc tài nguyên thấp hơn so với RSA.

Mật mã khóa công khai hoạt động như thế nào?

Các thuật toán mã hóa khóa công khai sử dụng cặp khóa bao gồm một khóa chung và một khóa riêng được tạo ra từ các bài toán toán học rất khó để mã hóa và giải mã dữ liệu. Nếu chúng ta sử dụng khóa chung để mã hóa, thì để giải mã chúng ta phải sử dụng khóa riêng tương ứng và ngược lại nếu khóa riêng được sử dụng để mã hóa, thì phải sử dụng khóa chung tương ứng để giải mã.

Hai người tham gia vào quá trình mã hóa khóa công khai là người gửi (An) và người nhận (Bình). Đầu tiên, An có được khóa công khai của Bình. An sẽ dùng khóa công khai này để mã hóa dữ liệu cần gửi bằng thuật toán mã hóa bất đối xứng và tạo ra bản mã. Bản mã này, sau đó, được gửi cho Bình. Bình sẽ sử dụng khóa riêng của mình để giải mã bản mã và thu được thông tin được gửi từ An.

Do với mỗi khóa công khai chỉ có một khóa bí mật mà người nhận sở hữu, do đó dù mọi người đều sở hữu khóa chung nhưng không thể giải mã được dữ liệu của người nhận.

Trong hệ mật khóa công khai, bất kỳ ai cũng có thể mã hóa dữ liệu bằng khóa chung của người nhận, nhưng dữ liệu được mã hóa đó chỉ có thể được giải mã bằng khóa riêng của người nhận.

Ngoài ra mật mã khóa công khai còn được sử dụng để tạo tính xác thực cho dữ liệu thông quan việc sử dụng chữ ký số.

Chữ ký số

Ứng dụng điển hình của mật mã khóa công khai là xác thực dữ liệu thông qua việc sử dụng chữ ký số. Chữ ký số thực chất là một chuỗi nhị phân đặc trưng cung cấp tính toàn vẹn, bằng chứng về nguồn gốc, danh tính và trạng thái của một tài liệu, giao dịch hoặc thông điệp điện tử. Chúng được sử dụng rộng rãi trong nhiều giao thức cho mục đích xác thực và đã được chứng minh là rất hữu ích và an toàn.

Chữ ký số là không thể sửa chữa và dễ dàng kiểm chứng nhờ sử dụng mật mã khóa công khai. Ngoài ra, do khóa riêng trong hệ mật khóa công khai chỉ liên kết đến một người dùng duy nhất, và chỉ có người dùng đó giữ khóa riêng, vì vậy chữ ký số cũng đảm bảo khả năng chống chối bỏ, có nghĩa là khi đã ký số lên dữ liệu thì người dùng không thể chối bỏ việc đã ký lên nó, và do vậy, chúng có thể ràng buộc về mặt pháp lý như chữ ký thông thường.

Chữ ký số được tạo ra như thế nào?

Bình thường, khi chúng ta sử dụng hệ mật mã khóa công khai để mã hóa và truyền dữ liệu, chúng ta sử dụng khóa công khai của người nhận để mã hóa, và do đó người nhận có thể dùng khóa riêng tương ứng của mình để giải mã dữ liệu, và chỉ duy nhất người nhận có khả năng làm việc đó. Tuy nhiên, trong chữ ký số, mọi chuyện lại ngược lại.

Chúng ta muốn xác nhận rằng thông điệp này đúng là do bản thân chúng ta ký vào nó, và mọi người đều có thể xác thực được. Do vậy, chữ ký số cần được giải mã bởi mọi người. Để đáp ứng điều này, chúng ta cần cho họ khóa chung (hay khóa công khai) và việc mã hóa diễn ra bằng khóa riêng bí mật của chính chúng ta.

Khi bạn mã hóa một cái gì đó bằng khóa riêng của mình, bất kỳ ai cũng có thể giải mã nó bằng khóa công khai, điều này nghe thật vô dụng, nhưng điều này đóng vai trò là bằng chứng cho việc bạn đã mã hóa dữ liệu. Nếu người khác không thể giải mã đúng dữ liệu bằng khóa công khai của bạn, thì hoặc là dữ liệu đã bị thay đổi và mất tính toàn vẹn hoặc là bạn không hề ký và tạo ra dữ liệu đó.

Đây được gọi là chữ ký số.

Trên thực tế, việc tạo và xác nhận chữ ký số phức tạp hơn rất nhiều, nó đòi hỏi có các thuật toán tạo chữ ký, sinh khóa, biến đổi dữ liệu, và thuật toán xác minh chữ ký. Mọi thứ tuân theo các lược đồ chữ ký số. Tuy nhiên về cơ bản nguyên lý hoạt động của chữ ký số đều tuân theo nguyên tắc trên.

Ứng dụng của mật mã khóa công khai và chữ ký số trong blockchain

Mật mã khóa công khai có thể được áp dụng cho các hệ thống trong đó nhiều người dùng có thể cần mã hóa và giải mã tin nhắn, chẳng hạn như email được mã hóa, trong đó khóa công khai có thể được sử dụng để mã hóa tin nhắn và có thể sử dụng khóa riêng để giải mã nó.

Các giao thức mã hóa SSL/TSL để thiết lập các liên kết được mã hóa giữa các trang web.

Ngoài ra, mật mã khóa công khai và chữ ký số được sử dụng rất rộng rãi và là nền tảng công nghệ cơ bản trong blockchain.

Hầu hết các loại tiền điện tử đều sử dụng cặp khóa (mật mã khóa công khai) để quản lý địa chỉ trên blockchain. Khóa công khai là địa chỉ, định danh của một đối tượng trên mạng lưới blockchain và giữ khóa công khai để bất kỳ ai cũng có thể xem nó. Khóa riêng được sử dụng để truy cập địa chỉ và ủy quyền cho các hành động cho địa chỉ.

 Dưới đây là một ví dụ về một địa chỉ trên blockchain Ethereum.

Chữ ký số cũng được sử dụng rộng rãi trong tiền mã hóa. Chúng có thể được sử dụng để ký lên các giao dịch nhằm đảm bảo nó an toàn hơn. Mọi người trong mạng lưới blockchain cần xác thực cho tính hợp lệ của giao dịch, do đó mọi người dùng cần có các khóa công khai tương ứng các khóa riêng bí mật được sử dụng để ký lên thông điệp. Bitcoin sử dụng thuật toán mật mã để đảm bảo rằng chỉ những chủ sở hữu hợp pháp mới có thể chi tiêu tiền trong giao dịch.

Trong trường hợp sổ cái Bitcoin, mỗi đầu ra giao dịch chưa được xác định (UTXO) thường được liên kết với một khóa công khai. Vì vậy, nếu người dùng X, người có UTXO được liên kết với khóa chung của mình, muốn gửi tiền cho người dùng Y, thì người dùng X sử dụng khóa riêng của mình để ký một giao dịch sử dụng UTXO và tạo UTXO mới được liên kết với khóa chung của người dùng Y.

Chữ ký số và mật mã khóa công khai còn được sử dụng trong các hợp đồng thông minh hoặc ví điện tử. Các hợp đồng thông minh và ví điện tử này yêu cầu chữ ký điện tử gồm nhiều khóa riêng (khác nhau) để giải mã thành công nội dung trước khi thực hiện bất kỳ hành động nào đó.

Tuy nhiên, những ứng dụng này chỉ là phần nổi của tảng băng chìm, vì mật mã khóa công khai có rất nhiều ứng dụng trong blockchain, từ việc triển khai trong các hợp đồng thông minh đơn giản đến các cấu trúc cấp phép, phân quyền nâng cao, với nhiều biến thể sử dụng phức tạp và tinh vi hơn. Điều này tùy thuộc vào yêu cầu của mỗi ứng dụng khác nhau.

Nguồn: tek4.vn

Category