2020/02/06
Blockchain

SHA-256 là gì? Giới thiệu chi tiết hàm số băm (Hash function) hỗ trợ công nghệ mã hóa của Blockchain

Khi nghiên cứu về tiền ảo, chúng ta thường gặp cụm từ SHA-256.

SHA-256 là hàm số băm hỗ trợ công nghệ mã hóa của Blockchain.

Bài viết này sẽ giải thích chi tiết về SHA-256.

Tổng quan về SHA-256

Trong Blockchain, hàm gọi là hàm băm được sử dụng trong rất nhiều trường hợp.

Hàm băm có các đặc trưng sau.

  • Trả về dữ liệu đầu ra có độ dài cố định từ những dữ liệu có độ dài tùy ý
  • Dữ liệu chỉ được chuyển đổi một chiều, về cơ bản không thể chuyển dữ liệu băm về dữ liệu gốc

SHA-256 là một trong số những hàm băm này.

SHA-256 là cách viết rút gọn của “Secure Hash Algorithm 256-bit”, đúng như tên gọi của nó biểu thị, bạn có thể thu được giá trị băm có độ dài 256 bit (32 byte). Theo tính chất hàm số băm, từ dữ liệu giống nhau luôn có thể thu được cùng một giá trị.

Mặt khác, từ những dữ liệu khác nhau dù chỉ một chút cũng thu được những giá trị khác nhau hoàn toàn. Ngoài ra, nó được thiết kế như một hàm băm dùng trong việc mã hóa, nên rất khó để tìm kiếm hiệu quả một dữ liệu khác có cùng giá trị băm với dữ liệu gốc.

Thuật toán của SHA-256

Trong thuật toán SHA, người ta xác định giá trị băm ban đầu, thông tin có thể sử dụng để biến đổi giá trị ban đầu này là dữ liệu đầu vào.

Trong trường hợp SHA-256, dữ liệu đầu vào được chia ra thành nhiều phần, mỗi phần có độ dài 64 byte.

Dữ liệu được chia ra được gọi là “message block” (khối thông báo, thông tin).

Khi dữ liệu đầu vào vượt quá 64 byte, nhiều message block sẽ được tạo thành.

Tiếp theo, message block đầu tiên được sử dụng làm thay đổi giá trị băm ban đầu để tính ra giá trị băm mới.

Sau đó, nó được xử lý theo phương thức giá trị băm tạo thành sẽ được biến đổi bằng message block tiếp theo để cho ra giá trị mới, và tiếp tục lặp lại với lần lượt các message block,…

Giá trị băm được đưa ra bởi message block cuối là kết quả cuối cùng.

Cứ như vậy, bằng cách sử dụng dữ liệu đầu vào được chia ra thành những phần 64 byte và biến đổi giá trị băm, chúng ta có thể thu được những giá trị có cùng độ dài bit bất kể độ dài dữ liệu đầu vào.

Tiêu chuẩn SHA -2

SHA-256 phát minh bởi NSA (Cơ quan An ninh quốc gia Hoa Kỳ), được định nghĩa là một phần của tiêu chuẩn “SHA-2” được tiêu chuẩn hóa bởi NIST (Viện Tiêu chuẩn và Kỹ thuật quốc gia Hoa Kỳ) với vai trò là một trong những tiêu chuẩn xử lý thông tin liên bang (FIPS 180-4) vào năm 2001.

Trong SHA-2, còn có những độ dài của các giá trị băm khác được định nghĩa như SHA-224 dài 224 bit, SHA-384 dài 384 bit, SHA-512 dài 512 bit.

Khi xem xét thuật toán giá trị băm, một vấn đề quan trọng là hiện tượng được gọi là “xung đột băm”.

Nó chỉ trường hợp hình thành giá trị băm giống nhau từ nguồn dữ liệu khác nhau.

Độ dài bit của giá trị được tạo ra là cố định bất kể độ dài dữ liệu gốc là bao nhiêu, do vậy những hàm số băm tuyệt đối không xảy ra xung đột là điều không thể thực hiện được.

Do đó, độ dài bit của giá trị băm càng dài thì càng khó xảy ra xung đột.

Nếu tăng số bit thêm 1 thì tỷ lệ tránh được xung đột băm sẽ tăng lên 2 lần, vì vậy giá trị băm có độ dài 256 bit sẽ giúp tăng tỷ lệ tránh xung đột băm lên 2×128 lần so với giá trị băm 128 bit.

 

Ngược lại, việc tìm kiếm dữ liệu tạo xung đột băm tốn khá nhiều thời gian, hiện tại việc tính toán dữ liệu gốc hầu như không thể thực hiện được.

Theo đó, loại dài 512 bit có thể cho giá trị băm với cường độ cao hơn, tuy nhiên SHA-512 có thuật toán được tối ưu hóa cho CPU 64 bit, vì vậy hệ thống tính toán khác với SHA-256, loại được tối ưu hóa cho CPU 32 bit.

Nhìn chung, loại dài nhất là SHA-512 có độ an toàn cao nhất, tuy nhiên SHA-256 mới là loại được sử dụng phổ biến nhất bởi ưu điểm cân bằng giữa tính an toàn trong mã hóa, tốc độ tính toán và khả năng dễ thực hiện.

Dịch vụ đang sử dụng SHA-256

Trong Bitcoin có 2 loại hàm băm được sử dụng là SHA-256 và RIPEMD-160.

Các hàm băm này phù hợp để tính bằng GPU và phần cứng chuyên dụng cho việc tính toán ASIC (Application Specific Integrated Circuit).

Ngược lại, trong những Blockchain khác, để có thể dễ khai thác bằng PC thông thường, tồn tại nhiều hàm băm sử dụng thuật toán băm được thiết kế để khó có thể tính toán bằng GPU và ASIC.

SHA-256 ban đầu được tính toán bằng CPU nhưng đã chuyển sang tính toán song song sử dụng GPU, và tiếp đến xu hướng chủ yếu là khai thác FPGA (FPGA mining) tức là thực hiện việc tính toán đó trên FPGA (Field-Programmable Gate Array).

Tuy nhiên, vì có thể giảm thiểu điện năng tiêu thụ và thực hiện tính toán tốc độ cao nếu tạo ra ASIC để thực hiện logic này nên hiện tại xu hướng chủ yếu là khai thác ASIC (ASIC mining) bằng ASIC chuyên dụng.

 

Ngoài ra, chứng chỉ máy chủ SSL, là chứng chỉ điện tử để thực hiện truyền nhận tín hiệu mã hóa SSL (Secure Socket Layer) giữa trình duyệt web và máy chủ web, cũng sử dụng hàm băm.

Cho đến vài năm trước đây, hàm băm SHA-1 được sử dụng nhiều nhưng hiện tại xu hướng chủ yếu là sử dụng SHA-2.

Chuyển đổi từ SHA-1 sang SHA-2

SHA-1, tiêu chuẩn tiền thân của SHA-2 là hàm băm tạo ra giá trị 160 bit (20 byte), được sử dụng trên nhiều giao thức và ứng dụng.

Tuy nhiên, mặc dù những lỗ hổng bảo mật và sự nguy hiểm của SHA-1 được phát hiện và gây lo ngại nhưng nó vẫn được tiếp tục sử dụng cho hầu hết trang web trên toàn thế giới.

Để đối phó với tình trạng trên, NIST đã ra khuyến nghị về việc chuyển sang SHA-2 vào năm 2010 trong khi SHA-1 đang được sử dụng phổ biến để mã hóa lúc đó. Tuy nhiên, SHA-2 đã không được phổ biến rộng rãi, còn đối với SHA-1 chỉ dừng lại ở mức “không khuyến khích sử dụng”.

Tuy nhiên, bắt đầu từ việc vào năm 2013 Microsoft công bố chủ trương hủy bỏ và SHA-1 sẽ không thể sử dụng từ năm 2017 trở đi đối với các chứng chỉ máy chủ SSL sử dụng hàm băm SHA-1, Google và Mozilla cũng công bố chính sách hủy bỏ tương tự đối với việc sử dụng SHA-1.

Hiện tại, việc sử dụng được chuyển từ SHA-1 sang SHA-2, và SHA-2 đang trở thành tiêu chuẩn thế giới.

 

Như vậy, SHA-256 được sử dụng đa dạng trong các lĩnh vực công nghệ mã hóa khác nhau chứ không chỉ dừng lại ở Bitcoin.

Có thể nói đây là một trong những công nghệ mà chúng ta muốn nắm giữ vì hiện tại đang chính là thời kỳ chuyển giao sang tiêu chuẩn SHA-2 của SHA-256.