β : ν΄μ(hash)λ λ¨λ°©ν₯ μνΈν κΈ°λ²μΌλ‘ ν΄μν¨μ(ν΄μ μκ³ λ¦¬μ¦)λ₯Ό μ΄μ©νμ¬ κ³ μ λ κΈΈμ΄μ μνΈνλ λ¬Έμμ΄λ‘ λ°κΏλ²λ¦¬λ κ²μ μλ―Έ
ν΄μν¨μ(hash function)λ μμμ κΈΈμ΄μ λ°μ΄ν°λ₯Ό κ³ μ λ κΈΈμ΄μ λ°μ΄ν°λ‘ 맀ννλ ν¨μμ΄λ€. μ΄λ, 맀ν μ μλ λ°μ΄ν°μ κ°μ ν€(key), 맀ν ν λ°μ΄ν°μ κ°μ ν΄μκ°(hash value), 맀ννλ κ³Όμ μ ν΄μ±(hashing)μ΄λΌκ³ νλ€.
SHA-256, SHA-512
λ±μ μ¬μ©νκ³ SHA-512 μ¬μ©μ κΆκ³// hash ν¨μ μ€ Hashμ Hmacμ΄ μ‘΄μ¬ // createHash const hash = crypto.createHash('sha256'); // createHmacμ΄μ© const crypto = require('crypto'); const secret = 'abcdefg'; const hash = crypto.createHmac('sha256', secret) .update('I love cupcakes') // μνΈνν κ° .digest('hex'); // μΈμ½λ©λ°©μ console.log(hash); // Prints: // 0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e
Hashν¨μμ Hmacν¨μμ μ°¨μ΄λ ν€ κ°μ μ 무
ν΄μ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ λ³νμν¨ ν΄μκ°μ νμ κ³ μ λ κΈΈμ΄μ κ°μΌλ‘ λνλκΈ° λλ¬Έμ νκ³λ₯Ό κ°μ§κ³ μλ€. (μ€λ³΅μ΄ μ κ² λνλ μλ‘ μ’μ ν΄μν¨μ) λ¨μν ν΄μ ν¨μλ₯Ό μ΄μ©ν΄μ λ³ννλ€κ³ ν΄μ μλ²½νμ§ μλ€. μ΄ μ μ 보μνκΈ° μν΄ λΉλ°λ²νΈμ
Salt
λΌλ νΉμ κ°μ λ£λ λ°©λ²μ΄ μκ³ , ν΄μ ν¨μλ₯Ό μ¬λ¬λ² λ리λ λ°©λ²μ΄ μλ€.
Node.jsμ cryptoλΌλ λ΄μ₯ λͺ¨λμ΄ μ‘΄μ¬, crypto λͺ¨λμ pbkdf2 λ©μλλ λ¨λ°©ν₯ μνΈνμμ λ§μ΄ μ¬μ©.// pbkdf2 λ©μλλ μ λ ₯κ°(secret), salt, ν΄μν¨μ λ°λ³΅νμ, ν΄μ μκ³ λ¦¬μ¦ // 5κ° μΈμλ₯Ό λ°λλ€. const crypto = require('crypto'); crypto.pbkdf2('secret', 'salt', 100000, 64, 'sha512', (err, derivedKey) => { if (err) { throw err; } console.log(derivedKey.toString('hex')); // '3745e48...08d59ae' });
ν΄μ±μ μ±κ³΅νλ©΄ Bufferννλ‘ callbackμΌλ‘ λ겨주기 λλ¬Έμ derivedKey.toString('hex') --> hexλ°©μμΌλ‘ λ¬Έμμ΄λ‘ λ§λ€μ΄ μ€λ€. (base64κ° μ’λ 짧μ λ¬Έμμ΄μ λ°ννλ€. base64, hexλ μΈμ½λ© λ°©μ)