Coin
Các hàm Băm SHA 256

Mật mã là cốt lõi của công nghệ blockchain

Nhu cầu mã hóa thông tin phát sinh cùng với sự phát triển của chữ viết. Chữ viết được mã hóa lần đầu tiên ở Ai Cập cổ đại, Lưỡng Hà và Ấn Độ cổ đại. Theo thời gian, mọi người đã học cách sử dụng các công cụ đặc biệt để mã hóa văn bản. Một trong những thiết bị mật mã được biết đến sớm nhất là skital, được quân đội Spartan sử dụng để gửi tin nhắn. Công nghệ mật mã không ngừng phát triển. Khi các phương pháp mã hóa hiện tại không còn hiệu quả nữa, người ta đã phát minh ra những cách mới để mã hóa thông tin.

Trong Chiến tranh thế giới thứ hai, Đế chế Đệ tam đã sử dụng bộ mã hóa quay điện cơ rất phức tạp được gọi là máy Enigma để mã hóa các thông điệp quân sự của mình. Máy Enigma bao gồm bàn phím, rôto, bảng mạch in và đèn. Văn bản đã nhập được chuyển đổi thành mật mã bằng rôto, vị trí của văn bản này sẽ thay đổi với mỗi lần nhấn phím. Một trung tâm giải mã 10.000 người đã phải mất nhiều năm nỗ lực để giải mã Enigma.

Với sự ra đời của máy tính, mật mã đã đạt đến một tầm cao mới. Nhiều quốc gia, đặc biệt là Hoa Kỳ đã tạo ra các chương trình mã hóa mới do chính phủ tài trợ. Trong số đó có thuật toán băm bảo mật SHA-256 do NIST phát triển. Thuật toán này đang được sử dụng để tạo các khối bằng bitcoin. Mạng blockchain Ethereum sử dụng thuật toán Keccak trên cơ sở đó tiêu chuẩn thuật toán băm SHA-3 mới được tạo ra được xuất bản lần đầu tiên vào năm 2015.

SHA-256 và quy trình tạo khối

Quá trình tạo khối bao gồm xác minh giao dịch và ghi lại nó, quá trình này được gọi là khai thác. Các giao dịch được ghi vào một khối bằng cách băm. Hashing là quá trình chuyển đổi văn bản có độ dài bất kỳ thành giá trị độ dài cố định. Các giao dịch bitcoin được băm bằng thuật toán SHA-256.

Đây là một ví dụ về một văn bản so với hàm băm của nó:

Các hàm Băm SHA 256

Như bạn có thể thấy, độ dài của văn bản được chuyển đổi bằng SHA-256 không ảnh hưởng đến độ dài của hàm băm, luôn là 64 ký tự và là 256 byte. Thuật toán SHA-256 thậm chí còn phân biệt chữ hoa chữ thường: Ví dụ các hàm băm các từ Xin chào và xin chào (có viết hoa và không có chữ cái) là hoàn toàn khác nhau.

Mục tiêu của việc khai thác là xác định hàm băm của khối được tạo, khối này sẽ phù hợp cho tất cả các giao dịch trên một mạng nhất định. Khó khăn của việc khai thác tăng lên khi cần nhiều sức mạnh xử lý hơn để tạo ra một khối duy nhất. Khi sức mạnh xử lý để tạo khối ngày càng tăng, số lượng các số không trong mã băm cũng tăng lên. Hiện tại có 20 số 0 liên tiếp khi bắt đầu băm bitcoin và cần một lượng lớn tài nguyên tính toán để tạo một khối. Tuy nhiên, thời gian tạo khối tối đa không đổi là 10 phút. Độ khó khai thác tự động tăng sau mỗi 2016 khối. Tốc độ chuyển đổi này đã được cố định trong mã nguồn Bitcoin.

Vì vậy, quá trình tạo một khối bao gồm việc ghi lại một hàm băm của một số lượng giao dịch nhất định có trong nó. Mỗi khối Bitcoin bao gồm các trường sau: số ma thuật, kích thước khối, tiêu đề khối, bộ đếm giao dịch và trường giao dịch chứa thông tin về các giao dịch trong đó.

Mỗi tiêu đề khối bao gồm các thành phần sau:

Phiên bản, băm tiêu đề khối trước đó, băm gốc Merkle, dấu thời gian, mục tiêu độ khó và giá trị nonce.

Merkle root hiển thị băm của các giao dịch hiện tại của một khối và được tính toán theo thuật toán Merkle tree, còn được gọi là cây băm nhị phân. Nó hoạt động như thế này:

  1. Ban đầu, hệ thống tính toán các băm của tất cả các giao dịch trong khối.
  2. Sau đó, hệ thống chia các giao dịch này thành các cặp và tính toán tổng băm của tổng các cặp giao dịch này.
  3. Sau đó, hệ thống chia các tổng đã tính thành từng cặp và tính toán chúng lặp đi lặp lại cho đến khi tính được một mã băm duy nhất, cái gọi là gốc, được tính toán.

Đây là một cây băm Merkel nhị phân:

Như bạn thấy, cây Merkle có cấu trúc nhị phân, vì vậy nó phải có một số phần tử chẵn. Nếu cây Merkle xuất hiện với một số phần tử lẻ, hệ thống sẽ nhân đôi nó để tạo thành một cặp.
Cây Merkle với một số phần tử lẻ có thể trông như thế này:

Do đó, tất cả dữ liệu giao dịch trong khối này đều được tính toán và ghi lại.

Mỗi khối được liên kết với khối trước đó và khối tiếp theo trong chuỗi blockchain. Nếu bạn cố gắng thay đổi ít nhất một giao dịch trong một khối, nó sẽ kích hoạt phản ứng dây chuyền. Điều này đầu tiên sẽ thay đổi băm của giao dịch đã thay đổi, do đó sẽ thay đổi nhánh của cây Merkle và cuối cùng là gốc Merkle. Sau đó, gốc Merkle được sửa đổi sẽ thay đổi tiêu đề khối và điều này sẽ thay đổi tất cả các khối tiếp theo trong chuỗi blockchain. Vì vậy, ngay cả một sửa đổi sẽ tính toán lại tất cả các công việc tính toán đã thực hiện ban đầu để tạo chuỗi khối cụ thể đó.

Mật mã khi xác minh giao dịch Bitcoin và Ethereum

Dữ liệu trong các giao dịch Bitcoin và Ethereum được xác minh bằng cách sử dụng chữ ký được tạo bởi cái gọi là Thuật toán chữ ký kỹ thuật số đường cong Elliptic (ECDSA). Thuật toán này sử dụng đường cong elliptic và trường hữu hạn.

Các quy trình để ký và xác minh một giao dịch là khác nhau. Một công cụ được gọi là khóa riêng được sử dụng để ký một giao dịch và một công cụ khác, được gọi là khóa công khai, được sử dụng để xác minh nó. Khóa riêng tư được tạo ngẫu nhiên trong quá trình tạo ví. Khóa công khai được tính toán từ khóa riêng bằng cách nhân một đường cong elip trên một trường hữu hạn. Khóa cá nhân chỉ nên được biết đối với người ký giao dịch và khóa công khai sẽ được biết đến với những người muốn xác minh nó.

Một đường cong elliptic bao gồm các tham số sau: một phương trình, một môđun đơn giản và một điểm cơ sở có bậc nguyên tố. Phương trình của một đường cong elip là y² = x³ + ax + b.

Bitcoin, Ethereum, EOS, Litecoin và nhiều loại tiền điện tử khác sử dụng đường cong hình elip secp256k1. Phương trình cho đường cong này có dạng y² = x³ + 7 mod p. Môđun đơn giản của đường cong secp256k1 là = 2²⁵⁶ – 2³² – 2⁹ – 2⁸ – 2⁷ – 2⁶ – 2⁴ – 1 (hoặc FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F trong hệ thập lục phân). Về cơ bản, nó là một số nguyên tố lớn, do đó có tên là số nguyên tố modulo.

Đường cong elliptic trên trường số thực trông giống như sau:

Điểm cơ sở G có bậc n đơn giản, có thể được biểu diễn bằng đồ thị dưới dạng số lần một điểm có thể được thêm vào chính nó cho đến khi hệ số góc của nó trở nên vô hạn, hoặc dưới dạng một đường thẳng đứng. Điểm cơ sở được chọn sao cho thứ tự là một số nguyên tố lớn.

Đối với secp256k1 điểm cơ sở G ở dạng nén có dạng: G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 , và số serial của G bằng: n = FFFFFFFF FFFFFFFFFFF48DAFFB08C08C08C08C08C08C08C08C08C08CA
Để tạo một khóa công khai, chúng ta phải nhân private key trên G:

Keypub = Keypriv × G

Mở khóa công khai thông qua khóa cá nhân không khó lắm. Tuy nhiên, Keypriv là một số rất lớn, vì vậy để lấy khóa riêng thông qua khóa công khai và bẻ khóa thuật toán ECDSA, cần phải tính toán 2¹¹ phép toán để có thêm điểm. Đối với một máy tính thông thường, một hoạt động như vậy sẽ mất hơn mười tỷ năm, và quá trình này tương thích với tuổi của vũ trụ.

Sau khi khóa cá nhân và khóa công khai đã được tạo, các giao dịch phải được ký bằng khóa cá nhân.

Để làm được điều này, chúng ta cần thực hiện các thao tác sau:

  1. Tính z = băm (giao dịch) modulo n
  2. Chọn một số nguyên ngẫu nhiên k lớn hơn hoặc bằng 1 và nhỏ hơn hoặc bằng n-1 (1 ≤ k ≤ n-1).
  3. Lấy điểm (x, y) bằng cách nhân k với G;

Lưu ý rằng k là bí mật tạm thời và phải bị phá hủy ngay sau bước 5. Làm rò rỉ bí mật k cũng giống như rò rỉ khóa bí mật: nếu kẻ tấn công biết k và chữ ký thì anh ta (hoặc anh ta) có thể tính khóa bí mật. ..

4. Tính r = x mod n. Nếu r = 0, quay lại bước 1;

Hàm x mod p chia x cho p và chỉ trả về phần còn lại của phép chia. Ví dụ: 78 mod 33 = 12 as 78 = (33×2) +12 hoặc 98 mod 31 = 5 as 98 = (31×3) +5).

Lưu ý rằng phép nhân nghịch đảo của s mod n được ký hiệu là 1 / k mod n, và 1 / k mod n tương đương với việc giải phương trình kx = 1 (mod n). Phương trình này được giải bằng thuật toán Euclid như sau. Giả sử s = 3 và n = 5, khi đó phương trình có dạng 3x = 1 (mod 5) hoặc theo thuật toán Euclid, như 3x = b (mod 5). Điều này mở rộng đến phương trình Diophantine tuyến tính ax – by = c, hoặc sx – ny = b, hoặc 3x – 5y = 1, trong đó x = 2 và y = 1 (6–5 = 1), do đó s-1 sẽ là 2 .

5. Tính s = (1 / k mod n) × (z + r × Keypriv) mod n. Nếu s = 0, quay lại bước 1;

6. Cặp được tính toán (r, s) sẽ là chữ ký của giao dịch.

Khi chữ ký của giao dịch được tạo và nhận, bất kỳ bên thứ ba nào cũng có thể xác minh nó bằng cách sử dụng khóa công khai như sau:

  1. Đảm bảo rằng các thành phần của chữ ký, các số r và s, nằm trong khoảng từ 1 đến n-1;
  2. Tính z = băm (giao dịch) modulo n
  3. Tính w = 1 / s mod n.
  4. Tính u = z × w mod n;
  5. Tính v = r × w mod n;
  6. Tính điểm (x, y) = (u × G) + (v × Keypub);
  7. Xác nhận rằng r = x mod n. Chữ ký đã xác minh sẽ không hợp lệ nếu r ≠ x mod n.

Như chúng ta có thể thấy, tính bảo mật của thuật toán ECDSA phụ thuộc vào tính ngẫu nhiên của k số nguyên và vào khả năng không thể lấy được khóa riêng trong một thời gian hợp lý bằng cách sử dụng sức mạnh tính toán thông thường. Công nghệ chuỗi khối cung cấp mức độ bảo mật cao nhất với hình thức mã hóa mới này và cách duy nhất để phá vỡ nó là tạo ra một máy tính lượng tử với hơn 2.000 qubit sức mạnh xử lý, điều này hiện không thể thực hiện được.

Bạn cũng có thể thích

Để lại một trả lời

Địa chỉ email của bạn sẽ không được công bố.