Giải ngố SHA: Mã hóa 256 bit an toàn thế nào

Bài viết này giải nghĩa mã hóa SHA trong ngôn ngữ dễ hiểu nhất, với một số ước lượng trực quan được sử dụng nhằm mô tả kích thước

SHA-256 LÀ GÌ?

SHA (Secure Hash Algorithm hay thuật giải băm an toàn) là năm thuật giải được chấp nhận bởi FIPS dùng để chuyển một đoạn dữ liệu nhất định thành một đoạn dữ liệu có chiều dài không đổi với xác suất khác biệt cao.

Thuật giải SHA là thuật giải băm mật được phát triển bởi cục an ninh quốc gia Mỹ (National Security Agency hay NSA) và đượ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)

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."

Ví dụ mã SHA-256 của một thông điệp:


ỨNG DỤNG

Từ 2008, SHA đã được STECH sử dụng trong SmartQMAN làm mã xác thực trong mỗi gói thông tin trao đổi (giữa các module phần mềm với nhau, giữa phần mềm tại cơ sở với phần mềm quản trị tập trung QMS Server). Mã SHA cũng được STECH sử dụng làm khóa bản quyền cho các phần mềm cung cấp cho khách hàng. Cũng như các giao thức bảo mật an toàn trên mạng Internet hiện nay như SSL, chữ ký điện tử, đều sử dụng các hàm băm SHA. 

Tuy nhiên, ứng dụng nổi tiếng nhất của SHA phải kể đến là hệ thống Tiền tệ Bitcoin, một hệ thống giao dịch tiền tệ phân tán 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).


256 BÍT AN TOÀN THẾ 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.4x109hash/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. Thực tế thì 1 máy tính tốc độ 4Ghz chỉ có thể thực hiện cỡ 10hash/s tuy nhiên ước lượng này không làm mất tính thực nghiệm.

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 100x109 = 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 100x109 x 10 = 1040hash/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 1078 / 1040 = 1038 giây ≈ 3.17098x1030 năm, hay ≈ 2.4x1020 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.

- nguồn: dev@onyx.vn -

Powered by Onyx Techlab