Keccak

Thuật toán Keccak là một hàm băm có chức năng nén dữ liệu bất kỳ thành một “dấu vân tay” với độ dài cố định và là thành phần cốt lõi của tiêu chuẩn SHA-3 do NIST phê duyệt. Keccak được ứng dụng rộng rãi trong Ethereum để tạo địa chỉ, xác định hàm của hợp đồng và ghi nhận nhật ký sự kiện. Thuật toán này áp dụng cấu trúc “sponge”, thực hiện việc trộn dữ liệu một cách toàn diện thông qua các quá trình hấp thụ và ép, đồng thời kết hợp với 24 vòng hoán vị. Thiết kế này cho phép hỗ trợ nhiều độ dài đầu ra, đảm bảo cân bằng giữa yếu tố bảo mật và hiệu suất.
Tóm tắt
1.
Keccak là một hàm băm mật mã được chọn làm nền tảng cho tiêu chuẩn SHA-3.
2.
Blockchain Ethereum sử dụng thuật toán Keccak-256 để tạo địa chỉ và băm giao dịch.
3.
Keccak áp dụng thiết kế cấu trúc sponge, mang lại mức độ bảo mật cao và độ dài đầu ra linh hoạt.
4.
So với các thuật toán SHA-2 truyền thống, Keccak cung cấp khả năng chống va chạm mạnh hơn và hiệu suất vượt trội.
Keccak

Thuật toán Keccak là gì?

Thuật toán Keccak là một họ hàm băm mật mã được xây dựng nhằm ánh xạ dữ liệu đầu vào bất kỳ thành một dấu vân tay số có độ dài cố định. Đây là nền tảng của chuẩn SHA-3 và được sử dụng rộng rãi trong các ứng dụng blockchain.

Một hàm băm có thể coi như một “máy tạo dấu vân tay số”: cùng một đầu vào sẽ luôn cho ra cùng một kết quả, nhưng gần như không thể phục hồi dữ liệu gốc chỉ từ đầu ra. Keccak hỗ trợ nhiều độ dài đầu ra khác nhau, phổ biến nhất là 256 bit (Keccak-256). Đầu ra cố định này giúp xác thực, lập chỉ mục và kiểm tra tính nhất quán hiệu quả.

Vì sao Keccak quan trọng trong Web3?

Keccak giữ vai trò cốt lõi vì là “máy tạo dấu vân tay số” trung tâm cho các hệ thống như Ethereum, làm nền tảng cho các quy trình thiết yếu như tạo địa chỉ, bộ chọn hàm hợp đồng thông minh và lập chỉ mục nhật ký sự kiện.

Chẳng hạn, trên các sàn như Gate, khi bạn nạp ETH, địa chỉ bắt đầu bằng “0x” được tạo ra bằng cách băm khóa công khai với Keccak-256 và lấy 20 byte cuối. Đối với lệnh gọi hợp đồng, bộ chọn hàm được tạo bằng cách băm chữ ký hàm với Keccak-256 và lấy 4 byte đầu tiên. Nhật ký sự kiện dùng Keccak để sinh chủ đề, giúp tìm kiếm nhanh chóng.

Thuật toán Keccak hoạt động như thế nào?

Keccak sử dụng cấu trúc “bọt biển” (sponge construction). Hình dung như một miếng bọt biển: trước tiên “hút” dữ liệu đầu vào để trộn trạng thái bên trong, sau đó “vắt” ra giá trị băm mong muốn.

Bước 1, Hấp thụ: Thông điệp đầu vào được chia thành các khối, sau đó XOR vào “vùng ghi” của trạng thái—giống như bọt biển hút nước và tích hợp dữ liệu vào trạng thái.

Bước 2, Hoán vị: Hàm hoán vị (Keccak-f) được áp dụng nhiều vòng để xáo trộn các bit trong trạng thái. Quá trình này là “xáo trộn” có thể đảo ngược; Keccak-f[1600] thường chạy 24 vòng.

Bước 3, Vắt: Đầu ra được đọc từ “vùng đọc” của trạng thái. Nếu cần đầu ra dài hơn, tiếp tục hoán vị rồi trích xuất thêm dữ liệu—như vắt thêm nước từ bọt biển khi cần.

Với tham số chuẩn Keccak-256, trạng thái bên trong có 1.600 bit, chia thành bitrate (vùng đọc/ghi) 1.088 bit và capacity (bộ đệm bảo mật) 512 bit. Capacity càng lớn, bảo mật càng cao.

Keccak được sử dụng trong Ethereum như thế nào?

Keccak có bốn ứng dụng chính trong Ethereum: tạo địa chỉ, bộ chọn hàm, chủ đề sự kiện và lập chỉ mục cấu trúc dữ liệu.

  • Tạo địa chỉ: Địa chỉ Ethereum thường được tạo bằng cách băm khóa công khai với Keccak-256 rồi lấy 20 byte cuối cùng để tạo địa chỉ bắt đầu bằng “0x”. Địa chỉ nạp trên Gate được tạo theo cách này. Một số định dạng kiểm tra checksum địa chỉ cũng dùng Keccak để xác minh kiểu chữ.
  • Bộ chọn hàm: Chữ ký hàm (ví dụ: "transfer(address,uint256)") được băm bằng Keccak-256, lấy 4 byte đầu làm selector. Selector nổi tiếng "0xa9059cbb" xuất phát từ quy tắc này.
  • Chủ đề sự kiện: Tên sự kiện và kiểu tham số được nối lại rồi băm bằng Keccak-256 để tạo chủ đề, giúp tìm kiếm sự kiện trên chuỗi nhanh chóng, hiệu quả.
  • Lập chỉ mục cấu trúc dữ liệu: Trong cây trạng thái hoặc khóa ánh xạ, các khóa được băm bằng Keccak-256 để giảm va chạm và tăng tốc truy vấn.

Keccak và SHA3 khác nhau thế nào?

Điểm khác biệt chính giữa Keccak và SHA3 nằm ở tham số padding (“phân tách miền”). SHA3-256 dùng hậu tố padding 0x06, còn Keccak-256 phổ biến trên Ethereum dùng 0x01.

Do đó, cùng một đầu vào sẽ cho kết quả khác nhau giữa Keccak-256 và SHA3-256. Khi phát triển hoặc kiểm toán, cần xác định rõ đang dùng “Keccak-256” hay “SHA3-256”—không thể thay thế cho nhau. Khi NIST chuẩn hóa SHA-3 năm 2015, họ đã điều chỉnh tham số phân tách miền này (nguồn: NIST, 2015).

Cách dùng Keccak đúng trong phát triển

Bước một: Xác định đầu vào là byte hay văn bản. Nếu là chuỗi, luôn mã hóa UTF-8; nếu là chuỗi hex, chuyển thành byte thô và không tính tiền tố “0x” là dữ liệu.

Bước hai: Chọn đúng hàm. Trong EVM, keccak256 (tức Keccak-256) là chuẩn. Một số thư viện gọi SHA3-256 là sha3—cần kiểm tra tài liệu và phiên bản kỹ để tránh nhầm lẫn.

Bước ba: Đối chiếu kết quả. Dùng hai thư viện hoặc công cụ độc lập để tính băm và đảm bảo kết quả khớp; có thể lấy các selector đã biết như "transfer(address,uint256)" ra "0xa9059cbb" làm ví dụ thử nghiệm.

Hãy coi giá trị băm là dấu vân tay số không thể đảo ngược—không phải mã hóa hay số ngẫu nhiên. Để tránh tấn công rainbow table, luôn thêm salt ngẫu nhiên trước khi băm và băm cả salt lẫn dữ liệu cùng lúc.

Những rủi ro và sai sót thường gặp với Keccak

Có ba sai sót chính: khác biệt padding, lỗi mã hóa và sử dụng sai trong ứng dụng.

  • Khác biệt padding: Dùng Keccak-256 thay cho SHA3-256 sẽ cho kết quả khác, dễ gây lệch địa chỉ hoặc selector—dẫn đến mất tiền hoặc lỗi gọi hợp đồng.
  • Lỗi mã hóa: Nhầm lẫn giữa văn bản và hex sẽ làm thay đổi hoàn toàn kết quả băm. Cần chuẩn hóa mã hóa và kiểm thử các trường hợp biên trong phát triển.
  • Sử dụng sai trong ứng dụng: Băm không phải là mã hóa. Lưu dữ liệu nhạy cảm sau một lần băm vẫn có thể bị tấn công từ điển. Luôn thêm salt ngẫu nhiên và kiểm soát truy cập. Với các quy trình an toàn tài chính (như nhận diện nạp on-chain của Gate), cần kiểm thử và kiểm toán kỹ trước khi triển khai.

Keccak an toàn và hiệu quả ra sao?

Bảo mật của Keccak dựa vào cấu trúc bọt biển và tham số capacity. Với Keccak-256, chống va chạm khoảng 2^128 phép tính; chống tìm ảnh gốc khoảng 2^256 phép tính.

Đến tháng 01 năm 2025, chưa có tấn công thực tế nào thành công với thông số chuẩn; nghiên cứu chủ yếu tập trung vào biến thể giảm vòng hoặc giới hạn lý thuyết. Về hiệu năng, các thư viện hàng đầu đã tối ưu hóa cho CPU/GPU với thông lượng cao; tăng tốc phần cứng (ASIC) đang phát triển cho các trường hợp đặc biệt.

Triển vọng tương lai của Keccak

Keccak sẽ tiếp tục là trung tâm bảo mật hệ thống với vai trò lõi của SHA-3; trong hệ sinh thái EVM, Keccak là nền tảng cho địa chỉ, selector và lập chỉ mục log. Khi tăng tốc phần cứng phát triển và các thư viện hoàn thiện, cả hiệu năng và công cụ sẽ tiến xa hơn. Một số trường hợp mới (như zero-knowledge proofs) có thể dùng hàm băm thay thế như Poseidon, nhưng điều này không ảnh hưởng đến sự ổn định của Keccak cho các tác vụ băm và lập chỉ mục phổ thông. Nhà phát triển chỉ cần phân biệt rõ Keccak-256 với SHA3-256, quản lý chặt mã hóa và kiểm thử, Keccak vẫn là công cụ nền tảng đáng tin cậy.

FAQ

Tôi muốn tạo địa chỉ ví bằng Keccak—bắt đầu từ đâu?

Trong Ethereum, Keccak-256 dùng để tạo địa chỉ tài khoản—bằng cách băm khóa công khai với Keccak-256 và lấy 20 byte cuối làm địa chỉ. Nếu bạn dùng Gate hoặc ứng dụng ví khác, quá trình này diễn ra tự động; nếu phát triển hợp đồng thông minh, có thể dùng hàm keccak256() tích hợp sẵn trong Solidity. Hãy thử các thư viện như Web3.js để quan sát cách hàm băm chuyển dữ liệu dài bất kỳ thành kết quả cố định 256 bit.

Tại sao các công cụ khác nhau cho kết quả băm Keccak khác nhau?

Lý do thường là khác biệt trong mã hóa dữ liệu đầu vào. Keccak-256 yêu cầu dữ liệu dạng byte—nếu nhập chuỗi văn bản, các công cụ có thể xử lý mã hóa ký tự khác nhau (UTF-8 so với ASCII). Cách khắc phục là chuẩn hóa mã hóa và chỉ rõ định dạng đầu vào khi phát triển; các nền tảng như Gate thường có hướng dẫn nhập liệu rõ ràng. Ngoài ra, cần xác nhận đang dùng Keccak-256 hay SHA3-256—kết quả sẽ khác dù đầu vào giống nhau.

Ngoài tạo địa chỉ, Keccak còn dùng làm gì trong hợp đồng thông minh?

Keccak-256 có nhiều ứng dụng trong hợp đồng thông minh: xác thực toàn vẹn dữ liệu (băm dữ liệu giao dịch để so sánh), tạo mã định danh duy nhất (băm các tham số kết hợp), hoặc kiểm soát truy cập (lưu thông tin nhạy cảm dưới dạng băm thay vì văn bản gốc). Một số hợp đồng băm dữ liệu người dùng trước khi lưu để tránh lộ thông tin thực. Tính linh hoạt này giúp Keccak trở thành công cụ nền tảng của Web3—nhưng lưu ý băm là một chiều: không thể phục hồi dữ liệu gốc từ giá trị băm.

Có cần kiến thức mật mã nâng cao để học Keccak không?

Không. Với người dùng Web3 hoặc lập trình viên mới, chỉ cần hiểu “Keccak là hàm băm một chiều—đầu vào giống nhau luôn cho kết quả giống nhau.” Nghiên cứu sâu về mật mã là tùy chọn (cho kiểm toán bảo mật hoặc nghiên cứu); đa số lập trình viên chỉ cần gọi hàm thư viện sẵn có như keccak256 của Solidity. Hãy bắt đầu bằng cách thử nghiệm với các ứng dụng thực tế như chữ ký hoặc tạo địa chỉ trên Gate hoặc testnet.

Cần lưu ý gì khi dùng Keccak trong ứng dụng ngoài chuỗi?

Khi gọi Keccak từ mã ngoài chuỗi (front end hoặc back end), cần đảm bảo phiên bản thư viện đồng nhất với trên chuỗi—thường là Keccak-256. Dùng các thư viện tiêu chuẩn như Web3.js hoặc ethers.js sẽ hạn chế tối đa sai sót vì mặc định đã triển khai đúng Keccak. Lưu ý việc tuần tự hóa dữ liệu—nếu sinh giá trị băm ngoài chuỗi để xác thực trên chuỗi, phương pháp tuần tự hóa (như mã hóa ABI) phải khớp tuyệt đối. Luôn kiểm thử kỹ trong môi trường thử nghiệm, nhất là các trường hợp chữ ký hoặc xác thực hợp đồng.

Chỉ một lượt thích có thể làm nên điều to lớn

Mời người khác bỏ phiếu

Thuật ngữ liên quan
kỷ nguyên
Trong Web3, "chu kỳ" là thuật ngữ dùng để chỉ các quá trình hoặc khoảng thời gian lặp lại trong giao thức hoặc ứng dụng blockchain, diễn ra theo các mốc thời gian hoặc số khối cố định. Một số ví dụ điển hình gồm sự kiện halving của Bitcoin, vòng đồng thuận của Ethereum, lịch trình vesting token, giai đoạn thử thách rút tiền ở Layer 2, kỳ quyết toán funding rate và lợi suất, cập nhật oracle, cũng như các giai đoạn biểu quyết quản trị. Thời lượng, điều kiện kích hoạt và tính linh hoạt của từng chu kỳ sẽ khác nhau tùy vào từng hệ thống. Hiểu rõ các chu kỳ này sẽ giúp bạn kiểm soát thanh khoản, tối ưu hóa thời điểm thực hiện giao dịch và xác định phạm vi rủi ro.
Phi tập trung
Phi tập trung là thiết kế hệ thống phân phối quyền quyết định và kiểm soát cho nhiều chủ thể, thường xuất hiện trong công nghệ blockchain, tài sản số và quản trị cộng đồng. Thiết kế này dựa trên sự đồng thuận của nhiều nút mạng, giúp hệ thống vận hành tự chủ mà không bị chi phối bởi bất kỳ tổ chức nào, từ đó tăng cường bảo mật, chống kiểm duyệt và đảm bảo tính công khai. Trong lĩnh vực tiền mã hóa, phi tập trung thể hiện qua sự phối hợp toàn cầu giữa các nút mạng của Bitcoin và Ethereum, sàn giao dịch phi tập trung, ví không lưu ký và mô hình quản trị cộng đồng, nơi người sở hữu token tham gia biểu quyết để xác định các quy tắc của giao thức.
mã hóa
Thuật toán mật mã là tập hợp các phương pháp toán học nhằm "khóa" thông tin và xác thực tính chính xác của dữ liệu. Các loại phổ biến bao gồm mã hóa đối xứng, mã hóa bất đối xứng và thuật toán băm. Trong hệ sinh thái blockchain, thuật toán mật mã giữ vai trò cốt lõi trong việc ký giao dịch, tạo địa chỉ và đảm bảo tính toàn vẹn dữ liệu, từ đó bảo vệ tài sản cũng như bảo mật thông tin liên lạc. Mọi hoạt động của người dùng trên ví và sàn giao dịch—như gửi yêu cầu API hoặc rút tài sản—đều phụ thuộc vào việc triển khai an toàn các thuật toán này và quy trình quản lý khóa hiệu quả.
Nonce là gì
Nonce là “một số chỉ dùng một lần”, được tạo ra để đảm bảo một thao tác nhất định chỉ thực hiện một lần hoặc theo đúng thứ tự. Trong blockchain và mật mã học, nonce thường xuất hiện trong ba tình huống: nonce giao dịch giúp các giao dịch của tài khoản được xử lý tuần tự, không thể lặp lại; mining nonce dùng để tìm giá trị hash đáp ứng độ khó yêu cầu; và nonce cho chữ ký hoặc đăng nhập giúp ngăn chặn việc tái sử dụng thông điệp trong các cuộc tấn công phát lại. Bạn sẽ bắt gặp khái niệm nonce khi thực hiện giao dịch on-chain, theo dõi tiến trình đào hoặc sử dụng ví để đăng nhập vào website.
Tồn đọng công việc
Backlog là thuật ngữ dùng để chỉ sự tồn đọng của các yêu cầu hoặc nhiệm vụ chưa được xử lý, phát sinh do hệ thống không đủ năng lực xử lý trong một khoảng thời gian nhất định. Trong lĩnh vực crypto, các trường hợp điển hình bao gồm giao dịch đang chờ xác nhận trong mempool của blockchain, lệnh xếp hàng trong bộ máy khớp lệnh của sàn giao dịch, cũng như các yêu cầu nạp hoặc rút tiền đang chờ kiểm duyệt thủ công. Backlog có thể gây ra việc xác nhận bị chậm, tăng phí giao dịch và xảy ra độ trượt khi thực hiện lệnh.

Bài viết liên quan

Cách đặt cược ETH?
Người mới bắt đầu

Cách đặt cược ETH?

Khi Quá trình hợp nhất hoàn tất, Ethereum cuối cùng đã chuyển từ PoW sang PoS. Người đặt cược hiện duy trì an ninh mạng bằng cách đặt cược ETH và nhận phần thưởng. Điều quan trọng là chọn các phương pháp và nhà cung cấp dịch vụ phù hợp trước khi đặt cược. Khi Quá trình Hợp nhất hoàn tất, Ethereum cuối cùng đã chuyển từ PoW sang PoS. Người đặt cược hiện duy trì an ninh mạng bằng cách đặt cược ETH và nhận phần thưởng. Điều quan trọng là chọn các phương pháp và nhà cung cấp dịch vụ phù hợp trước khi đặt cược.
2022-11-21 07:57:44
Hướng dẫn cách chuyển mạng trong MetaMask
Người mới bắt đầu

Hướng dẫn cách chuyển mạng trong MetaMask

Đây là hướng dẫn từng bước đơn giản về cách chuyển đổi mạng của bạn trong MetaMask.
2024-01-11 10:37:30
MakerDAO: DAPP "điên rồ nhất" của Ethereum
Người mới bắt đầu

MakerDAO: DAPP "điên rồ nhất" của Ethereum

Được thành lập như một trong những DAO sớm nhất trên Ethereum, MakerDAO đã giới thiệu stablecoin phi tập trung DAI. Bằng cách thiết lập một hệ thống loại bỏ rủi ro lưu ký tập trung, nó đã cách mạng hóa lĩnh vực DeFi. Bài viết này cung cấp thông tin khám phá toàn diện về lịch sử ban đầu của MakerDAO, các cơ chế chính, tính năng bảo mật và bối cảnh quản trị hiện tại của nó.
2023-11-22 09:45:45