﻿---
title: "Fungsi hash kriptografis"
description: "Panduan berorientasi verifikasi tentang fungsi hash kriptografis, mencakup properti keamanan, pengodean byte, SHA-2, SHA-3, Keccak, penggunaan dalam blockchain, dan risiko implementasi."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Fungsi hash kriptografis

> Hanya untuk tujuan edukasi; bukan nasihat investasi atau implementasi kriptografi. Digest yang cocok tidak dengan sendirinya membuktikan keaslian, kepemilikan, otorisasi, finalitas, atau ketersediaan data.

<a id="answer"></a>

## Jawaban langsung

Fungsi hash kriptografis secara deterministik memetakan pesan yang direpresentasikan sebagai byte menjadi digest dengan panjang keluaran yang telah ditentukan. Untuk hash `n`-bit dengan panjang tetap, hubungan dasarnya adalah:

`h = H(m), where h is in {0,1}^n`

Byte dan algoritma yang sama menghasilkan digest yang sama. Perubahan satu bit pada masukan seharusnya mengubah banyak bit keluaran secara tak terduga, tetapi efek avalanche ini bukan definisi keamanan. Sasaran keamanan utamanya adalah **resistansi preimage** (jika digest diketahui, mencari masukan yang menghasilkannya tidak layak dilakukan), **resistansi second-preimage** (jika satu masukan diketahui, mencari masukan lain dengan digest yang sama tidak layak dilakukan), dan **resistansi tabrakan** (mencari dua masukan berbeda apa pun dengan digest yang sama tidak layak dilakukan).

Hashing bukan enkripsi: tidak ada kunci dekripsi dan tidak ada jaminan bahwa masukan dapat dipulihkan. Karena tak terhingga banyaknya kemungkinan pesan dipetakan ke ruang keluaran yang terbatas, tabrakan pasti ada; keamanan berarti bahwa mencari tabrakan yang dapat dimanfaatkan tidak layak secara komputasi untuk algoritma dan panjang keluaran yang dipilih.

Digest juga tidak memberikan keaslian dengan sendirinya. Menghitung ulang hash suatu berkas hanya mendeteksi ketidakcocokan jika digest yang diharapkan dan algoritmanya diperoleh melalui saluran tepercaya. Protokol memperoleh jaminan yang lebih kuat dengan menggabungkan hash bersama tanda tangan, kode autentikasi pesan, struktur data terautentikasi, aturan konsensus, atau proof-of-work.

<a id="mechanism"></a>

## Cara kerja

1. **Tentukan byte secara tepat.** Pengodean teks, penggunaan huruf besar dan kecil, spasi, urutan field, representasi bilangan bulat, prefiks panjang, dan serialisasi semuanya memengaruhi `m`. Protokol harus menentukan pengodean kanonis serta mengikat hash pada algoritma, versi, jaringan, dan tujuan tertentu.
2. **Jalankan konstruksi yang ditentukan.** SHA-256 memproses awal pesan dengan panjang terbatas, membaginya menjadi blok, lalu memperbarui state internal secara iteratif. SHA3-256 menggunakan konstruksi sponge berbasis KECCAK. Keduanya menghasilkan digest 256-bit, tetapi merupakan fungsi yang berbeda dan keluarannya tidak dapat dipertukarkan.
3. **Tafsirkan keamanan berdasarkan properti yang diperlukan.** Untuk hash ideal `n`-bit, pencarian preimage generik memerlukan sekitar `2^n` evaluasi, sedangkan pencarian tabrakan generik memerlukan sekitar `2^(n/2)` karena birthday effect. Panjang keluaran saja tidak cukup jika algoritmanya telah ditembus, digest dipangkas, atau protokol di sekitarnya memiliki kelemahan.
4. **Bangun protokol di sekeliling digest.** Skema tanda tangan digital dapat menandatangani digest sebuah pesan; HMAC menambahkan kunci rahasia untuk autentikasi pesan; pohon Merkle membuat komitmen atas banyak daun dengan satu root; dan proof-of-work berulang kali melakukan hash terhadap header blok kandidat sampai suatu digest memenuhi target. Konstruksi-konstruksi ini memberikan jaminan yang berbeda.
5. **Gunakan fungsi yang tepat untuk chain tersebut.** Header blok dan node Merkle Bitcoin menggunakan SHA-256 ganda dalam urutan byte yang ditentukan. Eksekusi Ethereum menggunakan Keccak-256 dari desain KECCAK sebelum standardisasi, bukan SHA3-256 yang distandardisasi. Karena itu, label seperti "hash 256-bit" tidak memadai untuk verifikasi.
6. **Verifikasi konteks sebelum menarik makna.** Periksa sumber digest yang diharapkan, pengenal algoritma, pengodean byte, domain atau chain, referensi blok dan state, status konfirmasi, serta setiap pemangkasan. Komputasi yang benar pada konteks yang salah tetap merupakan verifikasi yang gagal.

<a id="example"></a>

## Contoh terurai

- **Perubahan kecil pada masukan.** SHA-256 dari lima byte UTF-8 untuk `hello` adalah `2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824`. Mengganti byte pertama dengan huruf kapital `H` menghasilkan `185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969`. Digest yang berbeda tidak mengungkapkan byte mana yang berubah.
- **Kekuatan keamanan tidak selalu sama dengan panjang digest pada setiap model serangan.** Hash ideal 256-bit menyediakan sekitar `2^256` pekerjaan preimage, tetapi `2^128` pekerjaan tabrakan. Perbedaan ini penting ketika protokol bergantung pada resistansi tabrakan, seperti yang sering terjadi dalam alur kerja tanda tangan digital.
- **Bukti Merkle mengautentikasi penyertaan terhadap satu root.** Verifikator melakukan hash atas daun yang telah dienkode bersama setiap sibling yang diberikan dalam urutan yang ditentukan sampai root yang menjadi komitmen terbentuk kembali. Kecocokan tidak membuktikan bahwa root tersebut sudah final, bahwa data daun itu benar, atau bahwa data yang tidak disertakan tersedia.
- **Proof-of-work menambahkan aturan target.** Bitcoin hanya memvalidasi header kandidat jika nilai SHA-256 gandanya, ketika ditafsirkan sesuai aturan konsensus, kurang dari atau sama dengan target yang dienkode. Digest tidak menjadi lebih resistan terhadap tabrakan hanya karena penambang melakukan lebih banyak pekerjaan.

<a id="risks"></a>

## Risiko

- Menggunakan algoritma usang atau tidak sesuai, terutama mengandalkan SHA-1 ketika resistansi tabrakan dibutuhkan.
- Menganggap SHA3-256, Keccak-256, SHA-256, SHA-256 ganda, dan berbagai varian yang dipangkas secara berbeda dapat saling dipertukarkan.
- Melakukan hash atas teks yang ditampilkan, bukan byte kanonis, atau mengabaikan normalisasi Unicode, spasi, endianness, urutan field, dan pengodean panjang.
- Mengunduh berkas dan digest yang diharapkan dari lokasi terkompromi yang sama, sehingga tidak ada pemeriksaan integritas independen.
- Menggunakan hash umum yang cepat secara langsung untuk menyimpan kata sandi, alih-alih skema hashing kata sandi dengan salt yang dirancang khusus dan faktor kerja yang sesuai.
- Menggunakan `H(secret || message)` sebagai kode autentikasi buatan sendiri; beberapa konstruksi hash iteratif memungkinkan serangan length-extension, sedangkan HMAC dirancang untuk autentikasi berkunci.
- Memangkas digest tanpa menghitung konsekuensinya terhadap keamanan tabrakan dan preimage pada skala serta model ancaman protokol.
- Menggunakan kembali pengodean lintas protokol tanpa pemisahan domain, sehingga digest yang valid dalam satu konteks dapat ditafsirkan dalam konteks lain.
- Menganggap hash transaksi membuktikan konfirmasi, finalitas, eksekusi berhasil, kepemilikan, atau bebas dari reorganisasi chain.
- Menganggap hash konten membuat data yang dirujuk dapat diambil; suatu komitmen dapat tetap valid meskipun setiap salinan yang tersedia telah hilang.
- Membandingkan string pada explorer tanpa memeriksa urutan byte, aturan prefiks, serialisasi, atau apakah antarmuka menampilkan pengenal internal dengan cara berbeda.
- Mengimplementasikan primitif kriptografi tanpa vektor uji standar, pustaka yang dipelihara, peninjauan independen, dan prosedur pemutakhiran.

<a id="misconceptions"></a>

## Kesalahpahaman umum

- **Hash adalah data terenkripsi.** Enkripsi dapat dibalik dengan kunci yang tepat; hash kriptografis adalah digest satu arah tanpa operasi dekripsi.
- **Masukan yang berbeda tidak mungkin memiliki digest yang sama.** Tabrakan pasti ada pada keluaran dengan panjang tetap. Desain yang aman membuatnya tidak layak ditemukan dan dieksploitasi.
- **Digest 256-bit selalu memberikan keamanan 256 bit.** Resistansi tabrakan generik adalah sekitar 128 bit untuk hash ideal 256-bit, dan pilihan protokol dapat menguranginya lebih jauh.
- **Hash yang cocok membuktikan siapa yang membuat pesan.** Hash biasa tidak memiliki rahasia dan tidak mengautentikasi pengirim; gunakan tanda tangan atau MAC yang sesuai ketika asal pesan penting.
- **Keccak-256 dan SHA3-256 adalah dua nama untuk fungsi yang sama.** Keduanya menggunakan desain yang sangat berkaitan, tetapi parameter standardisasinya berbeda dan menghasilkan digest yang berbeda.
- **Hash transaksi on-chain membuktikan penyelesaian.** Hash tersebut mengidentifikasi data transaksi yang dienkode; penyertaan dalam chain, status eksekusi, konfirmasi, dan finalitas adalah fakta yang terpisah.

<a id="related"></a>

## Topik terkait

- [Blockchain](/id/crypto/blockchain/)
- [Trilema blockchain](/id/crypto/blockchain-trilemma/)
- [Pohon Merkle](/id/crypto/merkle-tree/)
- [Proof of work](/id/crypto/proof-of-work/)

<a id="sources"></a>

## Sumber

- [Fungsi Hash](https://csrc.nist.gov/projects/hash-functions) - NIST (diakses: 2026-08-20)
- [Standar Hash Aman (SHS)](https://doi.org/10.6028/NIST.FIPS.180-4) - NIST (diakses: 2026-08-20)
- [Standar SHA-3: Fungsi Hash dan Keluaran Dapat Diperluas Berbasis Permutasi](https://doi.org/10.6028/NIST.FIPS.202) - NIST (diakses: 2026-08-20)
- [Referensi Pengembang Bitcoin: Rantai Blok](https://developer.bitcoin.org/reference/block_chain.html) - Bitcoin.org (diakses: 2026-08-20)
- [Yellow Paper Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf) - Ethereum (diakses: 2026-08-20)

Source: https://wiki.fcontext.com/id/crypto/cryptographic-hash/index.mdx
