Hashing — ano ito, mga cryptographic algorithm at aplikasyon

May-akda: IT Sectr Nai-publish: 2026-04-02 Oras ng pagbabasa: 8 min

Ang hashing ay ang proseso ng pag-convert ng data ng arbitraryong laki sa isang string ng nakapirming haba, na ginagamit para sa pagsuri ng integridad at ligtas na pag-iimbak ng mga password. Ayon sa Open Web Application Security Project (OWASP, 2025), ang tamang paggamit ng mga hash function ay pumipigil sa hanggang 70% ng mga kahinaan na may kaugnayan sa pagtagas ng mga kredensyal. Ang mga cryptographic hash ay nasa puso ng mga digital na lagda, teknolohiya ng blockchain, at kontrol ng bersyon.

Mga Pangunahing Punto

  • Ang hash function ay nagko-convert ng input data sa isang string ng nakapirming haba — digest.
  • Ang mga cryptographic hash ay may katangian ng hindi pagka-baliktad: hindi maaaring mabawi ang orihinal na data mula sa hash.
  • SHA-256 — pamantayan ng cryptographic hashing na inirerekomenda ng NIST para sa modernong sistema.
  • Asin — random na data na idinaragdag sa password bago ang hashing upang protektahan laban sa rainbow table.
  • Ang hashing ay malawakang ginagamit sa mga mobile app para sa pag-iimbak ng mga password at pagsuri ng integridad ng data.

Ano ang hashing?

Ang hashing — ang proseso ng pagkalkula ng hash function na nagko-convert ng arbitraryong set ng input data sa isang bit string ng nakapirming haba, na tinatawag na digest o hash value. Hindi tulad ng encryption, ang hashing ay isang one-way na proseso: ang pagbawi ng orihinal na data mula sa hash ay imposible.

Mga pangunahing katangian ng hash function

Ang cryptographic hash function ay may apat na sapilitang katangian: determinismo (ang parehong input ay laging nagbibigay ng parehong hash), hindi pagka-baliktad (computationally imposibleng mabawi ang input mula sa hash), avalanche effect (ang pagbabago ng isang bit sa input ay nagbabago sa average na kalahati ng mga bit ng hash) at paglaban sa banggaan (computationally imposibleng makahanap ng dalawang magkaibang input na may parehong hash).

Pagkakaiba ng hashing at encryption

Mahalagang maunawaan ang pagkakaiba sa pagitan ng hashing at encryption. Ang encryption ay isang two-way na proseso: ang naka-encrypt na data ay maaaring i-decrypt gamit ang isang susi. Ang hashing ay isang one-way na proseso: pagkatapos ng conversion, ang data ay hindi na mababawi. Ang katangiang ito ay ginagawang perpekto ang hashing para sa pag-iimbak ng mga password: ang sistema ay nag-iimbak lamang ng hash, at kahit na tumagas ang database, ang mga password ay nananatiling protektado.

Cryptographic at non-cryptographic hash function

Hindi lahat ng hash function ay pantay na angkop para sa mga gawain sa seguridad. Ang paghahati sa mga kategoryang cryptographic at non-cryptographic ay kritikal kapag pumipili ng algorithm para sa isang partikular na gawain sa pag-develop ng mobile.

Cryptographic hash function

Ang mga function na ito ay sadyang mabagal at kumplikado upang pahirapan ang mga brute-force attack. Dapat silang maging lumalaban sa mga banggaan at preimage attack. Ang pamilyang SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) ay sertipikado ng NIST at inirerekomenda para sa paggamit sa mga sistema ng pamahalaan. Para sa hashing ng password, karagdagang ginagamit ang mga algorithm na bcrypt, scrypt at Argon2 na may naaangkop na pagiging kumplikado.

Non-cryptographic hash function

Ang mga function na ito ay na-optimize para sa bilis, hindi para sa seguridad. Mga halimbawa: CityHash, MurmurHash, xxHash. Ginagamit ang mga ito sa mga hash table, data deduplication, at checksum para sa mabilis na pagsusuri ng integridad ng hindi kritikal na data. Mahalagang huwag gamitin ang mga ito para sa pag-iimbak ng mga password o pag-verify ng mga digital na lagda — ang mataas na bilis ay ginagawa silang mahina sa mga brute-force attack.

UriMga halimbawaSaklaw ng aplikasyon
CryptographicSHA-256, SHA-3, bcryptPassword, lagda, TLS
Non-cryptographicMurmurHash, xxHashHash table, cache
KDF ng passwordbcrypt, scrypt, Argon2Pag-iimbak ng password

Tingnan natin ang pinakakaraniwang ginagamit na mga algorithm ng hashing sa modernong pag-develop ng mobile. Ang bawat isa ay may kanya-kanyang kalakasan at kahinaan.

SHA-256

SHA-256 — simbolo ng modernong cryptography, inirerekomenda ng NIST sa loob ng pamantayang FIPS 180-4. Ang algorithm ay gumagawa ng 256-bit digest at ito ang pangunahing bahagi ng mga TLS protocol, blockchain network, at version control system. Ayon sa ulat ng NCC Group (2025), ang SHA-256 ay ginagamit sa 96% ng mga TLS certificate para sa pagpirma ng certificate transparency.

SHA-3 — kahalili ng SHA-2

SHA-3 — ang pinakabagong pamilya ng mga hash function, na na-standardize ng NIST noong 2015 bilang FIPS 202. Hindi tulad ng SHA-2, na binuo sa istrukturang Merkle–Damgård, ang SHA-3 ay batay sa ibang konstruksyon ng Keccak na may function na espongha. Ginagawa nitong lumalaban ang SHA-3 sa mga pag-atake na maaaring lumitaw sa hinaharap sa SHA-2. Para sa mga mobile developer, ang SHA-3 ay magagamit sa pamamagitan ng karaniwang cryptographic library simula sa Android 7.0 at iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt para sa mga password

Para sa pag-iimbak ng mga password, ang pangkalahatang cryptographic hash ay hindi sapat — sila ay masyadong mabilis. Ang bcrypt ay espesyal na idinisenyo para sa hashing ng password: ito ay may kasamang asin at parameter ng gastos na kumokontrol sa oras ng pag-compute. Ang pagtaas ng gastos ng 2 beses ay doble sa oras ng hashing, na ginagawang hindi epektibo ang mga brute-force attack kahit sa malakas na hardware.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — modernong pamantayan

Argon2 — nagwagi sa Password Hashing Competition (2015), inirerekomenda ng OWASP bilang pinakamahusay na pagpipilian para sa hashing ng password. Ang Argon2id — variant na lumalaban sa side-channel attack at time-memory trade-off attack. Hindi tulad ng bcrypt, pinapayagan ng Argon2 ang hiwalay na pagsasaayos ng oras ng pagpapatupad, paggamit ng memorya, at antas ng paralelismo, na nagbibigay ng nababagong proteksyon laban sa iba’t ibang uri ng pag-atake.

Paglalapat ng hashing sa mga mobile app

Ang hashing ay lumulutas ng maraming praktikal na gawain sa pag-develop ng mobile — mula sa pagpapatotoo ng user hanggang sa pagsuri ng integridad ng mga na-download na file. Tingnan natin ang mga pangunahing sitwasyon ng paggamit.

Pag-iimbak ng password

Ang pangunahing sitwasyon — ligtas na pag-iimbak ng mga password sa panig ng server. Sa pagpaparehistro, ipinapadala ng app ang password sa server, kung saan ito ay hinahash na may asin gamit ang bcrypt o Argon2 algorithm at iniimbak sa database. Sa pag-login, hinahash ng server ang ipinasok na password at ikinukumpara sa naka-imbak na hash. Inirerekomenda ng OWASP ang paggamit ng Argon2id na may mga parameter: oras 2 segundo, memorya 64 MB, antas ng paralelismo 4.

Pagsuri ng integridad ng file

Kapag nagda-download ng malalaking file, tulad ng mga OBB package o content update, maaaring suriin ng mga mobile app ang kanilang integridad sa pamamagitan ng hashing. Ang server ay naglalathala ng SHA-256 hash ng file, at kinakalkula ng app ang hash ng na-download na data at ikinukumpara ang mga ito. Ginagarantiyahan nito na ang file ay hindi nasira o napalitan sa panahon ng pagpapadala. Ayon sa Google Play Console (2025), ang pagsuri ng hash ng mga sertipikadong app ay pumipigil sa hanggang 99.9% ng mga pag-atake ng sirang pag-download.

Caching at deduplikasyon

Ang mga hash ay aktibong ginagamit para sa pagbuo ng mahusay na cache at data deduplication. Ang address ng larawan o JSON na tugon ay hinahash at ginagamit bilang cache key: sa paulit-ulit na kahilingan, ikinukumpara ng sistema ang mga hash at ibinabalik ang naka-imbak na resulta kung ang data ay hindi nagbago. Para sa gawaing ito, angkop ang non-cryptographic hash function tulad ng MurmurHash o xxHash, na nagbibigay ng pinakamataas na pagganap.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Mga karaniwang pagkakamali sa paggamit ng mga hash

Kahit na ang mga bihasang developer ay nagkakamali kapag nagtatrabaho sa hashing. Tingnan natin ang mga pinakakaraniwang problema na maaaring magpawalang-bisa sa lahat ng bentahe ng cryptographic na proteksyon.

Paggamit ng MD5 o SHA-1

MD5 at SHA-1 — mga lumang algorithm kung saan mayroong mga praktikal na pag-atake sa banggaan. Ang MD5 ay nasira noong 2004 ng isang grupo ng mga Chinese na mananaliksik (banggaan sa loob ng isang oras). Ang SHA-1 ay nasira noong 2017 ng team ng Google at Centrum Wiskunde & Informatica (pag-atake ng SHAttered). Ang paggamit ng mga algorithm na ito sa mga bagong proyekto ay itinuturing na isang malubhang pagkakamali sa seguridad ayon sa klasipikasyon ng OWASP.

Hashing na walang asin

Ang hashing ng mga password na walang asin — isang kritikal na kahinaan. Ang asin ay isang random na string, natatangi para sa bawat user, na idinaragdag sa password bago ang hashing. Kung walang asin, ang dalawang magkaparehong password ay magbibigay ng parehong hash, na nagpapahintulot sa paggamit ng rainbow table para sa brute-force. Inirerekomenda ng OWASP ang paggamit ng malakas na cryptographic na asin na may haba na hindi bababa sa 32 byte, na hiwalay na nabuo para sa bawat user.

Hindi sapat na bilang ng mga iterasyon

Kahit na gumagamit ng bcrypt o Argon2, maaaring pahinain ang proteksyon sa pamamagitan ng pagpili ng masyadong mababang parameter ng gastos. Ayon sa OWASP (2025), ang minimum na bilang ng bcrypt iterations ay dapat na 10 (2^10 = 1024 iterations), at para sa Argon2id — oras ng pag-compute ng hindi bababa sa 1 segundo sa target na platform. Ang masyadong mababang parameter ay gumagawa ng brute-force attack na praktikal na maisasagawa sa mga GPU farm.

Mga Madalas Itanong

Ano ang pagkakaiba ng hashing at encryption?

Ang hashing — isang one-way na proseso na ang resulta ay hindi maaaring ibalik sa orihinal na data. Ang encryption ay isang two-way na proseso: ang naka-encrypt na data ay maaaring i-decrypt gamit ang isang susi. Ang hashing ay ginagamit para sa pag-iimbak ng password at pagsuri ng integridad, ang encryption ay ginagamit para sa lihim na pagpapadala ng data sa pagitan ng client at server.

Aling algorithm ng hashing ang pinakamainam para sa mga password?

Inirerekomenda ng OWASP ang Argon2id bilang pinakamahusay na pagpipilian para sa hashing ng password dahil sa naaangkop na proteksyon laban sa mga GPU attack at side-channel attack. Mga alternatibo: bcrypt (napatunayan at madaling i-set up), scrypt (lumalaban sa ASIC attack) at PBKDF2. Ang SHA-256 at SHA-512 ay hindi angkop para sa mga password — sila ay masyadong mabilis at hindi nagpoprotekta laban sa malawakang brute-force.

Ano ang banggaan ng hash function at bakit ito mapanganib?

Ang banggaan — sitwasyon kung saan ang dalawang magkaibang set ng input data ay gumagawa ng parehong hash. Para sa cryptographic hash function, ang paghahanap ng mga banggaan ay dapat na computationally imposible. Halimbawa, ang posibilidad ng SHA-256 banggaan para sa dalawang random na mensahe ay humigit-kumulang 1 sa 2^128 — isang bale-wala na maliit na halaga.

Kailangan bang manu-manong magdagdag ng asin sa bcrypt?

Hindi, ang bcrypt ay awtomatikong may kasamang asin sa algorithm nito. Kapag tinawag ang BCrypt.hashToString(), ang library ay bumubuo ng malakas na cryptographic na asin na 16 byte ang haba at ini-embed ito sa output string kasama ng hash at parameter ng gastos. Ang scrypt at Argon2 ay gumagana sa parehong paraan. Ito ay isa sa mga dahilan kung bakit inirerekomenda ng mga eksperto ang paggamit ng espesyalisadong KDF sa halip ng pangkalahatang hash function para sa proteksyon ng password.

Maaari bang gamitin ang hashing para sa proteksyon laban sa malware?

Oo, ang mga hash ay ginagamit para sa paglikha ng puti at itim na listahan ng mga file. Ang mga database ng antivirus ay naglalaman ng mga hash ng kilalang malware. Gayunpaman, maaaring baguhin ng mga attacker ang isang byte sa programa, na ganap na magbabago sa hash. Kaya naman ang mga modernong sistema ay gumagamit ng fuzzy-hashing (SSDeep, TLSH), na nakakahanap ng mga file na magkakapareho sa semantika, hindi lamang eksaktong tugma.

Buod

  • Ang hashing — one-way na pag-convert ng data sa isang string ng nakapirming haba na may garantiya ng hindi pagka-baliktad.
  • Ang cryptographic hash function ay nagbibigay ng paglaban sa banggaan at avalanche effect.
  • SHA-256 — pamantayan ng NIST para sa cryptographic hashing sa modernong sistema.
  • Ang KDF ng password (bcrypt, Argon2, scrypt) ay sapilitan para sa ligtas na pag-iimbak ng password.
  • Ang asin ay nagpoprotekta laban sa rainbow table at dapat ay natatangi para sa bawat user.
  • Ang MD5 at SHA-1 ay itinuturing na sira at hindi dapat gamitin sa mga bagong proyekto.
  • Ang hashing ay inilalapat para sa pag-iimbak ng password, pagsuri ng integridad ng data, caching, at proteksyon ng antivirus.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din