SHA-256 của Bitcoin mạnh cỡ nào

“SHA-256 rất mạnh. Nó không chỉ là một bước tăng dần từ MD5 lên SHA1. Nó có thể kéo dài vài thập kỷ trừ khi có một cuộc tấn công đột phá lớn nào đó.”

– Satoshi Nakamoto

SHA-2 (Secure Hash Algorithm 2 hay Thuật-toán-băm-an-toàn-2) là một tập hợp các hàm băm mật mã được thiết kế bởi Cơ quan An ninh Quốc gia Hoa Kỳ (NSA) và xuất bản lần đầu vào năm 2001 được xuất bản thành chuẩn của chính phủ Mỹ bởi viện công nghệ và chuẩn quốc gia Mỹ (National Institute of Standards and Technology hay NIST)

SHA-256 là gì?

Năm thuật giải SHA chuẩn là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài 384 bit), và SHA-512 (trả lại kết quả dài 512 bit).

Những thuật giải này được gọi là “an toàn” vì theo chuẩn FIPS 180-2 phát hành ngày 1 tháng 8 năm 2002:
1) Cho một giá trị băm nhất định được tạo nên bởi một trong những thuật giải SHA, việc tìm lại được đoạn dữ liệu gốc là không khả thi. Hay còn được gọi là mã một chiều,
2) Việc tìm được hai đoạn dữ liệu khác nhau có cùng kết quả băm tạo ra bởi một trong những thuật giải SHA là không khả thi.
3) Bất cứ thay đổi nào trên đoạn dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị băm hoàn toàn khác với xác suất rất cao.

Bạn có thể thử nghiệm vào trang web này và băm một đoạn ký tự xem kết quả băm của nó:

Ví dụ mình băm ký tự 123 thì nó ra 1 dãy dài duy nhất và luôn luôn là duy nhất của 123 nhưng vốn không có cách nào dịch ngược được dãy dài đó về 123.

Ứng dụng nổi tiếng nhất của SHA phải kể đến là hệ thống Bitcoin, một hệ thống giao dịch phân tán phi tập trung trên mạng internet sử dụng mã SHA-256 để xác thực các giao dịch và lưu trữ dạng chuỗi các sự kiện lịch sử theo thời gian được liên kết với nhau bởi các mã xác thực (BlockChain)

SHA-256 mạnh đến cỡ nào?


Cách dùng phổ biến của mã một chiều SHA là tạo ra chữ ký của thông điệp bằng cách tính hàm băm của chuỗi ghép từ thông điệp cần xác thực với một khóa bí mật, khóa bí mật nói chung là rất dài:

Chữ ký = SHA256(“thông điệp cần xác thực”, “khóa bí mật”) = hash

Với tính chất của mã một chiều, chữ ký có thể được công khai, thông điệp có thể công khai, nhưng thành phần khóa bí mật không thể truy ngược lại được vì suy ngược lại toàn văn dữ liệu gốc từ chữ ký là không thể.

Cách duy nhất để truy ngược lại toàn văn dữ liệu gốc là thử mọi khả năng có thể của khóa bí mật và cách khóa được ghép với thông điệp cần xác thực, điều này cũng đồng nghĩa với với việc kiểm tra mọi khả năng của đầu vào để tìm ra chữ ký giống với chữ ký đã biết, phương pháp này gọi là BruteForce. Không mất tổng quát, xét “khóa bí mật” = SHA256(“secret-key”) = 256 bits

Vì mỗi thay đổi rất nhỏ ở dữ liệu gốc, dù nhỏ, cũng sẽ tạo nên một giá trị băm hoàn toàn khác với xác suất rất cao không thể dự báo trước, nên việc kiểm tra này chính là kiểm tra trên toàn bộ không gian của giá trị băm, tức là BruteForce với 2256 khả năng.

Vậy BruteForce 2256 khó đến thế nào?

2256 = 115792 089237316 195423570 985008687 907853269 984665640 564039457 584007913 129639936 > 1078

Giả định mỗi máy tính cá nhân có tốc độ 4Ghz có thể xử lý 1.4G phép tính băm mỗi giây, 1.4×109hash/s, Trái Đất có 7 tỷ người mỗi người có một máy tính như vậy, sức mạnh tính toán của toàn thể Trái Đất là: 1019hash/s

Trong giản Ngân Hà (Milkyway) có khoảng 100 tỷ ngôi sao, giả định rằng 1% trong số đó có nền văn minh như Trái Đất thì sức mạnh tính hash của Ngân Hà là: 1019hash/s x 1% x 100×109 = 1028hash/s

Trong giản Ngân Hà (Milkyway) có khoảng 100 tỷ ngôi sao, giả định rằng 1% trong số đó có nền văn minh như Trái Đất thì sức mạnh tính hash của Ngân Hà là: 1019hash/s x 1% x 100×109 = 1028hash/s

Vũ trụ khả kiến được cho là có 100 tỷ thiên hà, và vũ trụ toàn thể được cho là lớn gấp 10 lần như vậy, thì sức mạnh tính hash của vũ trụ toàn thể là: 1028hash/s x 100×109 x 10 = 1042hash/s

Với tốc độ tính toán này, để kiểm tra toàn bộ 1078 trường hợp, vũ trụ toàn thể cần đến 1036 giây ≈ 3.17×1028 năm, hay ≈ 2.4×1018 lần tuổi của chính vũ trụ, tức là việc này không khả thi.

Chính vì vậy SHA-256 được cho là rất an toàn.

Thảo luận nhé bạn: