Bài viết này là một đoạn trích từ cuốn sách Hướng dẫn của Cư sĩ về Bitcoin bởi Logan Brutsche và được tái bản tại đây với sự cho phép của tác giả.
Mật mã học là khoa học áp dụng các hàm toán học vào các phần dữ liệu để đảm bảo tính bảo mật của chúng.
Rất nhiều câu chuyện hư cấu phổ biến ngụ ý rằng bất kỳ hệ thống nào cũng có thể bị tấn công, miễn là bạn có một hacker đủ giỏi. Cách “hack Hollywood” này không phải là cách thế giới thực hoạt động — hacker phải tìm ra lỗ hổng trong hệ thống để khai thác, chẳng hạn như phòng máy chủ không khóa, mật khẩu dễ đoán, cổng mạng không được bảo vệ hoặc “cửa sau” được cài đặt như một công việc bên trong để có được quyền truy cập trái phép sau này.
Mặc dù đúng, nhưng chúng tôi không bao giờ có thể đảm bảo rằng một hệ thống nhất định không có lỗ hổng bảo mật — xét cho cùng, các hệ thống được tạo ra bởi những con người không hoàn hảo — quan điểm rằng “bất cứ thứ gì cũng có thể bị tấn công” là sai. Kể từ đầu những năm 90, chúng tôi đã có quyền truy cập vào các kỹ thuật mật mã khá đơn giản là miễn nhiễm với hack. Việc áp dụng các kỹ thuật như vậy đôi khi có thể để lại chỗ để khai thác.
Bản thân mật mã không thể bị tấn công để tạo ra chữ ký mật mã giả mạo (được xác định ngay sau đây), cũng như không thể tấn công toán học để tạo ra 2 + 2 = 5 — mặc dù cả mật mã và toán học đều có thể được sử dụng không chính xác. Nếu một hệ thống sử dụng mật mã không thành công, đó là do một nhà thiết kế đã áp dụng sai mật mã. Không phải do mật mã không hoạt động hay do ai đó “hack” mật mã — cũng không phải do lỗi toán học nếu ngân hàng xử lý sai tài khoản của bạn hoặc lỗi của email khi mẹ bạn tải xuống tệp đính kèm lạ và bị nhiễm vi-rút máy tính . Đây là một sự khác biệt quan trọng, bởi vì Bitcoin rất trực tiếp là một ứng dụng của mật mã đã được thiết lập.
Mật mã không phải là một công nghệ mới, chưa được thử nghiệm. Tất cả các kỹ thuật mật mã được sử dụng bởi Bitcoin đã được sử dụng kể từ khi Internet ra đời và rất cần thiết cho nhiều giao thức Internet phổ biến được sử dụng hàng ngày. Khoa học mật mã được các nhà khoa học máy tính coi là đáng tin cậy và cần thiết giống như cách mà khoa học tên lửa được NASA coi là đáng tin cậy và cần thiết..
Keypairs: Nền tảng của mật mã
Các cặp khóa là nền tảng của mật mã được sử dụng trong các blockchain. Cặp khóa có hai phần: khóa cá nhân và khóa công khai. Các khóa này thực sự không hơn gì những số rất lớn với mối quan hệ toán học cụ thể, được sử dụng thay cho mật khẩu và tên người dùng.
Bạn sẽ xử lý một khóa công khai như tên của mình hoặc tên người dùng: trong hầu hết các trường hợp, bạn chia sẻ nó với bất kỳ ai yêu cầu và những người có nó có thể sử dụng nó để tham khảo hoặc liên hệ với bạn. Nó gắn liền với danh tiếng của bạn (hoặc trong trường hợp của Bitcoin là lịch sử giao dịch của bạn), vì vậy bạn có thể có một số khóa công khai (và do đó là một số cặp khóa) mà bạn sử dụng cho các mục đích khác nhau. Khóa công khai có thể được sử dụng để tham chiếu hoặc xem tài khoản, nhưng không thể tự nó cho phép bất kỳ hành động nào trên tài khoản đó.
Khóa riêng tư phải được coi như mật khẩu: không nên chia sẻ với bất kỳ ai và được sử dụng để xác thực một số hành động nhất định, chẳng hạn như gửi BTC.
Nhưng có một sự khác biệt quan trọng giữa khóa riêng và mật khẩu. Để sử dụng mật khẩu, bạn phải gửi mật khẩu cho một người hoặc máy chủ để nó có thể được kiểm tra dựa trên hồ sơ của họ. Bạn phải tin tưởng rằng mật khẩu sẽ được xử lý một cách có trách nhiệm sau khi gửi. Ngược lại, khóa riêng có thể được sử dụng để xác thực chính bạn mà không cần gửi nó đi bất cứ đâu. Nơi duy nhất nó từng được lưu trữ hoặc được sử dụng trực tiếp là trên thiết bị cục bộ của bạn.
Điều này rất quan trọng, vì nếu bạn có thể xác thực bản thân mà không cần gửi bí mật của mình đi bất cứ đâu, bạn có thể kiểm soát hoàn toàn tính bảo mật của nó — bạn không dễ bị mất hiệu lực bảo mật của các hệ thống khác. Đây là một phần thiết yếu của điều khiến Bitcoin không thể bị phá hủy. Không có mật khẩu hoặc khóa riêng tư nào được lưu trữ trên chính Bitcoin để kẻ tấn công xâm phạm, nhưng người dùng vẫn có thể xác thực giao dịch.
Nhưng làm thế nào bạn có thể sử dụng khóa riêng tư để xác thực một giao dịch, nếu bạn không bao giờ gửi khóa cá nhân ở bất kỳ đâu? Câu trả lời liên quan đến mối quan hệ toán học giữa khóa cá nhân và khóa công khai: chữ ký mật mã.
Chữ ký mật mã
Có một số kỹ thuật khác nhau để tạo và xác thực chữ ký mật mã và các định lý toán học cho phép chúng hoạt động nằm ngoài phạm vi của bài viết này. Đối với những người không quen thuộc với mật mã, quy trình được mô tả ở đây ban đầu có vẻ hoàn toàn bất khả thi. Tôi nhớ rõ mình có ấn tượng này khi tôi bắt đầu nghiên cứu về Bitcoin bốn năm trước.
Bây giờ, tôi sẽ chỉ cần lưu ý một lần nữa rằng những công nghệ này được sử dụng trong nhiều giao thức Internet phổ biến và là một phần được thiết lập của khoa học thông tin.
Hãy tưởng tượng hai người, Alice và Bob, đã trực tiếp giao dịch khóa công khai. Alice muốn gửi cho Bob một tin nhắn, nhưng Bob là một người rất đáng ngờ và sẽ không tin rằng tin nhắn thực sự đến từ Alice trừ khi anh ta có thể chứng minh nó bằng toán học, ngoài mọi nghi ngờ. Để tạo điều kiện thuận lợi cho việc chứng minh này, họ đồng ý sử dụng chữ ký mật mã.
Để tạo chữ ký, Alice sử dụng thuật toán tạo chữ ký trên máy tính của mình, thuật toán này lấy khóa cá nhân và thông điệp hoàn chỉnh của cô ấy làm đầu vào và tạo ra một chữ ký mật mã. Sau đó, cô ấy gửi cho Bob kết hợp tin nhắn / chữ ký này — nhưng, quan trọng là, không gửi khóa cá nhân của cô ấy.
Khi Bob nhận được tin nhắn và chữ ký, anh ta có một thuật toán xác thực chữ ký bổ sung để sử dụng. Thuật toán này nhận đầu vào là thông điệp và chữ ký, và xác định công cộng khóa của cặp khóa mà Alice đã sử dụng để tạo chữ ký. Khi Bob thấy thuật toán của mình xuất ra khóa công khai của Alice, anh ta đã chứng minh bằng toán học rằng chữ ký phải được tạo bằng cặp khóa của Alice, mặc dù anh ta không biết và không thể tính được nửa riêng của cặp khóa của Alice.
Đặt ngắn gọn hơn, quy trình chữ ký mật mã này cho phép Bob xác minh rằng thư không được tạo hoặc sửa đổi bởi một số bên thứ ba và phải được tạo bằng khóa riêng của Alice mà không cần phải (hoặc có thể) biết khóa riêng của cô ấy. Tất cả những gì anh ấy cần là kết hợp tin nhắn / chữ ký và khóa công khai của cô ấy.
Theo trực giác, điều này dường như là không thể và bạn có thể cảm thấy như thể mình đã hiểu nhầm điều gì đó. Nếu khóa riêng tư và khóa công khai của Alice có liên quan mật thiết với nhau và Alice đã sử dụng khóa riêng tư của mình để tạo chữ ký mà Bob nhận được, thì làm cách nào để anh ta có thể lấy được khóa công khai của cô ấy nhưng không thể tìm thấy khóa riêng tư của cô ấy? Câu trả lời cho điều này đòi hỏi sự hiểu biết sâu sắc hơn nhiều về toán học so với hầu hết mọi người và nằm ngoài phạm vi của cuốn sách này.
Tuy nhiên, kỹ thuật này vẫn được tin cậy và sử dụng hàng ngày, và được coi là vững chắc trong cộng đồng mật mã. Khi bạn truy cập một trang web và địa chỉ của nó bắt đầu bằng https, chữ “s” cho biết rằng trang web đó đã tự xác thực bằng chữ ký mật mã. Máy tính của bạn đã sử dụng thuật toán xác thực chữ ký, giống như Bob đã làm trong ví dụ trên, để xác minh trang web thực sự đến từ cặp khóa phù hợp. Chữ ký mật mã này được dựa vào để đảm bảo bất kỳ tương tác nào giữa bạn và trang web được mã hóa và xác thực. Nếu thử nghiệm này không thành công, các trình duyệt hiện đại sẽ cảnh báo bạn và gắn cờ trang web là nguy hiểm.
Số lượng lớn vừa đủ
Trước đó, tôi đã đề cập ngắn gọn rằng khóa cá nhân và khóa công khai có chức năng giống như tên người dùng và mật khẩu, nhưng trên thực tế không khác gì những số cực kỳ lớn với mối quan hệ toán học đặc biệt. Do đó, tôi thường hỏi những câu hỏi sau:
“Ai đó không thể chỉ có máy tính đoán hoặc đếm qua một loạt các con số và thử chúng làm khóa cá nhân? Chẳng phải cuối cùng họ sẽ chạy qua một khóa riêng của một số cặp khóa được nhắm mục tiêu và do đó giành được quyền kiểm soát đối với danh tính đó? ” Thật vậy, trong trường hợp của Bitcoin, điều này sẽ cho phép kẻ tấn công đánh cắp số tiền được giữ bởi một số keypair.
Đó là một câu hỏi hay, nhưng nó không xảy ra. Như đã nêu trước đây, có một số địa chỉ Bitcoin với số BTC trị giá hàng triệu đô la đã không chuyển đi trong nhiều năm — mặc dù tất cả những gì cần thiết để đánh cắp nó là khóa cá nhân phù hợp — một con số khổng lồ phù hợp! Nếu bạn có thể đoán được khóa riêng của các địa chỉ đó, thì tiền là của bạn để gửi đi bất cứ đâu. Không giống như mật khẩu, bạn có thể kiểm tra các khóa riêng tư cục bộ trên máy của mình và không có máy chủ giới hạn số lần hoặc tốc độ bạn thử chúng.
Vậy tại sao vẫn chưa có ai đánh cắp những khoản tiền này? Câu trả lời nằm ở kích thước gần như vô lý của những con số được sử dụng làm khóa cá nhân. họ đang đủ lớn.
Hãy bắt đầu với một thử nghiệm suy nghĩ đơn giản. Hãy tưởng tượng khóa riêng tư của bạn vừa đủ lớn để nếu tất cả các máy tính trên thế giới cùng hoạt động, chúng sẽ mất cả 24 giờ để bruteforce đoán nó. Nếu bạn chỉ thêm một chữ số nữa vào khóa cá nhân của mình, sẽ có nhiều hoán vị hơn mười lần để các máy tính thực hiện, vì vậy sẽ mất 10 ngày thay vì một. Sáu chữ số nữa sẽ đưa nó đến 27.000 năm.
Trong mỗi trường hợp, việc tạo khóa cá nhân – chỉ yêu cầu khả năng tạo số ngẫu nhiên – vẫn rất nhỏ. Việc sử dụng khóa cá nhân để tạo chữ ký, cũng như kiểm tra các chữ ký này so với khóa công khai, cũng vẫn đơn giản về mặt tính toán. Nhưng công việc cần thiết để đoán khóa cá nhân tăng lên theo cấp số nhân với mỗi chữ số phụ. Để làm cho các khóa riêng tư “miễn nhiễm” với việc đoán thô bạo, chúng ta chỉ cần thêm đủ các chữ số — chúng ta chỉ cần làm cho chúng đủ lớn.
Vì vậy, khổng lồ như thế nào là đủ lớn? Các khóa cá nhân được sử dụng trong Bitcoin là số nguyên 256 bit, tương đương với một số có độ dài bảy mươi sáu chữ số. Sức mạnh của kích thước của con số này là không thể tin được. Hình minh họa sau đây được lấy từ cuốn sách của Bruce Schneier Mật mã học ứng dụng, và là một minh chứng thuyết phục về những con số đủ lớn.
Đầu tiên, hãy thừa nhận rằng hệ quả cụ thể của định luật thứ hai của nhiệt động lực học là có một năng lượng tối thiểu cần thiết để thay đổi một bit thông tin nhị phân (thay đổi 1 thành 0 hoặc ngược lại). Điều này có nghĩa là bất kỳ quá trình tính toán nào cũng yêu cầu một số năng lượng tối thiểu để thực hiện, bất kể phần cứng được sử dụng là gì.
Bây giờ, giả sử bạn có thể khai thác toàn bộ sản lượng năng lượng của mặt trời chỉ để cung cấp năng lượng cho một máy tính được thiết kế đặc biệt, có công việc là đếm qua hoặc đoán các khóa cá nhân, với hy vọng tìm thấy khóa riêng của cặp khóa (có thể kiểm soát BTC).
Sử dụng một chút toán học và nhiệt động lực học, bạn sẽ thấy rằng một máy tính hoàn toàn hiệu quả có thể đếm qua 2178 giá trị dựa trên toàn bộ sản lượng năng lượng hàng năm của mặt trời. Nếu chúng ta chia giá trị này cho số khóa cá nhân có thể có, 2256, chúng ta thấy rằng máy tính giả định này sẽ chỉ có thể đoán hoặc đếm thông qua 0,0000000000000000000003% tổng số khóa cá nhân có thể có — dựa trên toàn bộ sản lượng năng lượng hàng năm của mặt trời.
Hơn nữa, đây chỉ là tính toán và không bao gồm nhiệm vụ phức tạp hơn nhiều là thực sự kiểm tra từng khóa riêng tư để xem liệu khóa đó có tương ứng với khóa công khai phù hợp hay không. Vì vậy, trong 0,000000000000000000000003% khả năng máy tính này đã sử dụng đúng khóa cá nhân vào cuối một năm, nó thậm chí sẽ không nhận ra điều đó.
Những con số này không liên quan gì đến công nghệ của các thiết bị; chúng là giá trị cực đại có thể có theo định luật nhiệt động lực học đã được thiết lập từ những năm 1930. Và họ ngụ ý mạnh mẽ rằng các cuộc tấn công bạo lực chống lại các khóa 256-bit (mà Bitcoin sử dụng) sẽ không khả thi cho đến khi máy tính được xây dựng từ một thứ khác ngoài vật chất và chiếm một thứ khác ngoài không gian..
Đây là sức mạnh của những con số đủ lớn. Không quan trọng một hacker giỏi như thế nào. Trừ khi anh ta có thể khai thác sức mạnh của ba trăm tỷ giới tính mặt trời trong một năm, hoặc một mặt trời trong ba trăm tỷ năm, máy tính của anh ta thậm chí không thể đếm thông qua tất cả các khóa riêng tư — hãy để một mình kiểm tra hoặc sử dụng chúng.
Để có cái nhìn sâu hơn về Bitcoin và tiền mã hóa, hãy đọc cuốn sách của Logan Brutsche, Hướng dẫn của Cư sĩ về Bitcoin.