Ethereum は、NIST が SHA-3 を確定する前に Keccak を採用しました。その後 FIPS 202 がメッセージのパディングにドメイン分離のビットを追加したため(パディングの最初のバイトは、SHA3-256 では 0x06、Keccak-256 では 0x01)、2 つの関数は置換関数とパラメーターを共有しながらも、まったく無関係なダイジェストを出力します。空文字列の Keccak-256 は c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 ですが、同じ入力の SHA3-256 は a7ffc6f8…f8434a です。
Ethereum では、アドレス(64 バイトの公開鍵のハッシュ値の末尾 20 バイト)、ABI の関数セレクター(transfer(address,uint256) のハッシュ値の先頭 4 バイトが a9059cbb)、イベントのトピック、ストレージスロット、EIP-191 と EIP-712 の署名用ハッシュ、ecrecover の入力に使われます。Solidity の keccak256 と RPC メソッドの web3_sha3 は、後者の名前に反して、どちらも Keccak-256 を計算します。
典型的なバグは、Ethereum が Keccak-256 を前提としている場面で、ライブラリの sha3_256(FIPS)を呼び出してしまうことです。この場合、エラーは一切出ないまま、ダイジェスト、アドレス、署名の検証がすべて誤った結果になります。keccak256 または keccak_256 という名前の関数を使ってください。