메뉴

bcrypt

2018-02-09 04:35:44

목차

bcrypt

bcrypt는 Blowfish를 기반으로 만들어진 "단방향 암호화 해싱함수"로 1999년 USENIX에서 발표됐다. Rainbow table 공격을 막기 위해서 salt를 사용하며, 암호검사 요청이 반복될 수록 cost를 늘림으로써, 무차별 대입 공격(brute-force search)을 막을 수 있다. cost는 반복횟수로 2^n 이다.

 count

bcrypt 함수는 OpenBSD와 SUSE 리눅스를 비롯한 몇몇 리눅스 배포판에서 암호화 해시 알고리즘으로 사용하고 있다. 리눅스의 /etc/shadow 파일을 열어보면 "$2a$"나 "$2b$"로 시작하는 패스워드 해시가 있는데, 이들이 bcrypt 방식의 암호화 해시다.

 bcrypt

테스트 코드

package main
    
import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)   

var password = []byte("mypassword-123")

func main() {
    // password로 부터, 암호화 해시를 만든다.
    // cost는 DefaultCost(10)
    en, _ := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    fmt.Println(string(en))

    // 패스워드를 비교한다.
    // 성공할 것이다.
    err := bcrypt.CompareHashAndPassword(en, []byte("mypassword-123"))
    if err != nil {
        fmt.Println("Error", err.Error())
    } else {
        fmt.Println("Success")
    }
    
    // 패스워드를 비교한다.
    // 실패할 것이다.
    err = bcrypt.CompareHashAndPassword(en, []byte("mypassword-234"))
    if err != nil {
        fmt.Println("Error", err.Error())
    } else {
        fmt.Println("Success")
    }
}   

	
		

참고