Belf 회원가입시 암호화 되지 않는 비밀번호

func (u *User) BeforeSave(tx *gorm.DB) (err error) {
	// 비밀번호 암호화: sha2('{비밀번호}', 256)
	u.Password = util.Sha256(u.Password)
}

internal/app/entities/user.go 코드에서 회원가입을 위해서 입력한 비밀번호를 단순 SHA256 해쉬 함수로 변환후 DB에 저장하는 것을 확인 가능합니다.

DB가 외부에 노출된 경우 평문 비밀번호를 알아낼 수도 있으며, SHA256 해쉬값이 변경된 경우 수신자는 이것을 알아 챌 수 없습니다.

이미지 1.png

hash된 문자열과 그것의 원본 문자열이 무엇인지를 적어둔 rainbow table 을 통해서 유저의 비밀번호를 유추할 수 있습니다.

해결법

HMAC 알고리즘을 사용하면 됩니다.

부적절한 예시

signature = hashlib.sha256(Key + Message)

적절한 예시

signature = hmac.new(Key, Message, hashlib.sha256)

참고자료

3 Common Encryption Mistakes That Are Easy to Avoid