단방향 암호화

  • 단방향 암호화는 암호화한 데이터를 복호화할 수 없는 암호화 방식
  • Hash Function 사용해서 데이터를 해시 값으로 변환.
    • 해시 함수 알고리즘에는 SHA-256, MD5, BCrypt 등 있다.
//java에서는 암호화 메서드(digest)의 입력 파라미터와 리턴 타입이 모두 바이트 계열이다.
byte[] origin = input.getBytes("UTF-8);
MessageDigest digest = MessageDigest.getInstance("SHA-256);
byte[] hash = digest.digest(origin);// byte배열을 암호화
 
 
이제 해시를 16진수 표기법이나 Base64표기법 사용해서 문자열로 표현.
  • 충돌 저항성(collision resistance)
    • 해시 함수는 원본 데이터에 상관 없이 일정한 길이의 해시값을 생성함.
    • 길이가 제한되기에 서로 다은 데이터가 동일 해시 값 가질 수 있음.
    • 서로 다른 데이터에 대해 최대한 다른 해시 값을 생성하는 해시 알고리즘이 좋다 할 수 있다.
    • 해시 저항성이 크다고 할 수 있는 것
    • 길수록 충돌 가능성 낮으니 SHA 256보다 SHA 512가 더 길어서 충돌 가능성이 낮음.
  • 단항향 암호회는 원본 데이터로 복호화 못해서 비밀번호 찾기 기능 못함.
  • 대신 임의 문자열로 초기화 하고, 사용자는 등록된 이메일같은걸로 초기화된 비번으로 로그인하게 유도하면 됨.

솔트

  • 같은 원본 데이터에 항상 동일한 해시 값을 생성하는건 보안에 취약.
  • 이를 방지하기 위해 솔트를 사용.
  • 솔트는 임의 값이며, 암호화 할때 솔트를 함께 사용하면 솔트 값에따라 원본데이터가 같더라도 해시 값이 다르다.