Tải bản đầy đủ (.docx) (11 trang)

Công nghệ mới blockchain tiềm hiểu về hàm băm, và một số mà chữ ký điện tử.

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (354 KB, 11 trang )

Chun đề cơng nghệ mới

Nội dung

Tìm hiểu về Solidity


Hashing with Keccak256



Verifying Signature



Gas Optimizations



Bitwise Operators



Unchecked Math




Hashing with Keccak256 ?

I.



Thuật tốn Keccak (hay cịn gọi là SHA-3) là một trong những thuật toán
băm mã (hash function) an toàn và được sử dụng rộng rãi nhất hiện nay.
Nó là một thuật tốn băm được phát triển bởi đại học Leuven, Bỉ, và
được chọn làm tiêu chuẩn băm mã của Viện Tiêu chuẩn và Công nghệ
Quốc gia Hoa Kỳ (NIST) vào năm 2015. Thuật tốn Keccak có thể được
sử dụng để bảo vệ các thông tin nhạy cảm như mật khẩu, thơng tin tài
chính và thơng tin cá nhân trên mạng.
Thuật tốn Keccak có độ dài băm mã linh hoạt, với các giá trị độ dài băm
mã phổ biến là 224, 256, 384 và 512 bit. Nó được thiết kế để tránh được
các tấn công bằng cách sử dụng một cấu trúc chuyển đổi phức tạp, giúp
làm chậm tấn cơng từ độ phức tạp của thuật tốn.
Thuật tốn này cũng có khả năng chống lại các tấn cơng cơ chế quy
hoạch động (collision attacks), một dạng tấn công phổ biến đối với các
thuật tốn băm mã trước đó. Thuật tốn Keccak cịn có thể được sử dụng
để tạo chữ ký số (digital signature) và trao đổi khóa bí mật (key
exchange). Khi được sử dụng để tạo chữ ký số, thuật tốn Keccak sử
dụng một cặp khóa đối xứng (public-private key pair) để mã hóa thơng
tin và tạo ra một chữ ký số dựa trên thông tin được mã hóa. Khi được sử
dụng để trao đổi khóa bí mật, thuật tốn Keccak sử dụng một khóa bí mật
để mã hóa thơng tin và tạo ra một khóa chia sẻ (shared key) dựa trên
thơng tin được mã hóa.
1.

Sơ lượt về Hashing with Keccak256.
Ethereum có tích hợp hàm băm keccak256, đây là một phiên bản thay
thế của SHA3. Một hàm băm về cơ bản ánh xạ đầu vào thành một số thập
lục phân 256 bit ngẫu nhiên. Một thay đổi nhỏ trong đầu vào sẽ gây ra sự
thay đổi lớn trong hàm băm.


2. Cụ thể thuật toán hàm băm Keccak256:
A. Đặt điểm cụ thể về thuật toán hàm băm Keccak256.
 Keccak256 là một thuật toán băm được thiết kế bởi Guido
Bertoni, Joan Daemen, Michặl Peeters và Gilles Van Assche.
Nó dựa trên hàm băm Keccak.


 Keccak256 được sử dụng rộng rãi trong các ứng dụng
blockchain, đặc biệt là trong Ethereum. Nó thay thế cho SHA-3
trong Ethereum.
 Thuật toán này áp dụng hàm băm lên dữ liệu đầu vào và trả về
một chuỗi hash có độ dài cố định 256 bit (32 byte).
 Chuỗi hash này gần như khơng thể đảo ngược lại để tìm ra dữ
liệu gốc.
 Keccak256 được sử dụng để xác thực tính tồn vẹn dữ liệu, tạo
ví điện tử, chữ ký số và nhiều mục đích bảo mật khác.
B. Lợi ích của việc sử dụng Keccak256:
 Tốc độ xử lý nhanh, hiệu suất cao.
 Tỷ lệ va chạm (collision) thấp, bảo mật tốt.
 Khả năng chống tấn công tốt hơn so với các hàm băm thơng
thường.
 Đảm bảo tính bất khả đảo của hash, khó có thể đốn được dữ
liệu gốc.
 Phù hợp với các ứng dụng blockchain như Bitcoin, Ethereum.
 Được chuẩn hóa và cơng nhận rộng rãi.

3. Ví dụ


Như vậy, Keccak256 cung cấp một cách để băm dữ liệu một cách an

tồn và khơng thể đảo ngược. Nó thường được sử dụng trong các ứng
dụng blockchain để xác thực dữ liệu, định danh người dùng, lưu trữ
dữ liệu,... một cách bảo mật.


II.

Verifying Signature.
1. Sơ lượt về Verifying Signature.
Verifying Signature (Xác thực chữ ký) là q trình kiểm tra tính xác thực
của một chữ ký kỹ thuật số trong một giao dịch.

2. Cụ thể hàm Verifying Signature.
 Chữ ký kỹ thuật số là một giá trị được tạo ra bằng cách mã hóa dữ liệu
giao dịch ban đầu bằng khóa bí mật của người gửi.
 Việc xác thực chữ ký đảm bảo rằng:
o Chữ ký đó được tạo bởi khóa bí mật của người gửi
o Nội dung giao dịch không bị thay đổi sau khi được ký
 Quá trình xác thực:
o Sử dụng khóa cơng khai của người gửi để giải mã chữ ký
o So sánh kết quả giải mã với dữ liệu gốc
o Nếu trùng khớp, chữ ký hợp lệ. Nếu không, chữ ký không hợp lệ
 Xác thực chữ ký rất quan trọng để đảm bảo tính xác thực và toàn vẹn
của giao dịch.


3. Ví dụ.

Để xác minh chữ ký, bạn cần có dữ liệu đã được ký kết, chữ ký và
khóa cơng khai tương ứng. Sau đó, sử dụng khóa cơng khai để xác

minh tính hợp lệ của chữ ký.
Nếu việc xác minh chữ ký thành cơng, điều đó chứng tỏ rằng dữ liệu
không bị thay đổi và chữ ký được tạo bởi ai đó sử dụng khóa riêng tư
tương ứng với khóa cơng khai đã sử dụng.
Việc xác minh chữ ký là một phần quan trọng trong việc đảm bảo tính
tồn vẹn và nguồn gốc của dữ liệu trong các ứng dụng bảo mật.


III.
1.

Gas Optimizations.
Sơ lượt về Gas Optimizations.
Gas optimization là một khía cạnh quan trọng trong lĩnh vực blockchain,
đặc biệt là trong các hệ thống sử dụng hợp đồng thông minh. Gas là đơn
vị đo chi phí tính tốn trên một blockchain, và việc tối ưu hóa gas đang
trở thành một nhiệm vụ quan trọng để giảm thiểu chi phí và tối ưu hóa
hiệu suất mạng.

2.

Cụ thể hàm Gas Optimizations.
 Gas Optimization là q trình tối ưu hóa lượng gas tiêu thụ khi thực
thi các hợp đồng thông minh Ethereum, nhằm giảm chi phí giao dịch.
 Một số kỹ thuật Gas Optimization phổ biến:
 Sử dụng các kiểu dữ liệu có kích thước nhỏ hơn như uint8, int16 thay
vì uint256, int256 mặc định.
 Tránh dùng vòng lặp và đệ quy trong hợp đồng.
 Tối ưu hóa các phép tốn số học phức tạp.
 Giới hạn số lượng điều kiện và vòng lặp.

 Cache giá trị không thay đổi để truy xuất nhanh hơn.
 Sử dụng thư viện bên thứ 3 đã được tối ưu hóa.


3. Ví dụ.

Tối ưu hóa gas là rất quan trọng trong lập trình Solidity và
Ethereum để giảm chi phí giao dịch. Một số kỹ thuật chính bao
gồm:
 Sử dụng các hàm pure và view để đọc dữ liệu mà không
thay đổi trạng thái
 Tránh sử dụng vòng lặp, thay bằng cách lặp cố định
 Giới hạn số lượng cuộc gọi hàm bên ngoài contract
 Lưu trữ dữ liệu lớn ngoài chuỗi, chỉ lưu hash trên chain
 Sử dụng các thư viện đã được tối ưu hóa như OpenZeppelin
 Tối ưu hóa cấu trúc dữ liệu và thuật tốn
 Giới hạn kích thước contract
 Sử dụng abi.encodePacked() thay vì abi.encode()
Áp dụng các kỹ thuật trên sẽ giúp giảm thiểu gas một cách hiệu
quả trong lập trình blockchain.


IV.

Bitwise Operators.
1. Sơ lượt về Bitwise Operators.
Toán tử bitwise (bitwise operators) là các phép toán được thực hiện trên
cấp độ từng bit (bit-level) của dữ liệu nhị phân (binary data). Các toán tử
này hoạt động trên mỗi bit của số nguyên một cách độc lập, cho phép bạn
thực hiện các phép toán logic và truy cập trực tiếp vào các bit của dữ liệu.

2. Cụ thể về Bitwise Operators.
 Toán tử bitwise hoạt động trên các bit của các số nguyên ở cấp độ
bit. Chúng cho phép thực hiện các phép toán logic bitwise như
AND, OR, XOR, NOT, shift bit, etc.
 Các toán tử bitwise thường được sử dụng để thiết lập, xóa, kiểm tra
các cờ (flags) trong một biến. Ví dụ sử dụng biến flags để lưu trạng
thái ON/OFF của các tính năng.
 Bitwise AND (&) trả về 1 nếu cả hai bit tương ứng là 1, ngược lại
là 0.
 Bitwise OR (|) trả về 1 nếu một trong hai bit là 1, ngược lại là 0.
 Bitwise XOR (^) trả về 1 nếu hai bit khác nhau, ngược lại là 0.
 Bitwise NOT (~) đảo tất cả các bit.
 Left shift (<<) dịch trái các bit của số cho trước số lượng bit. Right
shift (>>) dịch phải.
 Các tốn tử này có thể kết hợp với nhau để thực hiện các tác vụ
phức tạp hơn.
 Chúng thường được sử dụng để tối ưu hiệu suất so với các phép
tốn logic thơng thường.


3. Ví dụ

Một số ứng dụng của Bitwise Operators:





Lưu trữ và truy xuất flags, options
Nén và giải nén dữ liệu

Mã hóa và giải mã dữ liệu
Các hàm băm và checksum

Như vậy, Bitwise Operators cung cấp cách để thao tác trực tiếp
trên các bit của số nguyên, hữu ích trong nhiều trường hợp xử lý
dữ liệu ở cấp độ bit.


V.

Unchecked Math.
1. Sơ lượt về Unchecked Math.
Unchecked math trong Solidity là việc thực hiện các phép tốn mà
khơng có sự kiểm tra overflow hoặc underflow.
2. Cụ thể về Unchecked Math.
 Khi thực hiện các phép toán số học trong Solidity, trình biên dịch
sẽ tự động kiểm tra và ngăn chặn tràn số. Tuy nhiên, việc này tiêu
tốn gas.
 Nếu chắc chắn logic của chương trình khơng dẫn đến tràn số, ta có
thể sử dụng Unchecked Math để loại bỏ kiểm tra và tiết kiệm gas.
3. Ví dụ.

Một số lưu ý khi sử dụng Unchecked Math:
 Chỉ nên sử dụng khi chắc chắn không xảy ra tràn số
 Không nên sử dụng với các giá trị nhập từ bên ngoài
(msg.sender, tx.origin, block...)
 Nên kiểm tra kỹ logic trước khi triển khai
Như vậy, Unchecked Math giúp tiết kiệm gas nhưng cần cân nhắc và
sử dụng thận trọng để tránh lỗi.




×