올바른 비밀번호 암호화 알고리즘 선택하기 (안전하게 패스워드 저장하기)

HYEONG HWAN, MUN/ 11월 8, 2022/ 미분류/ 2 comments

https://blog.lael.be/post/11518

** 쓰고 있어요 **

 

암호화에 대한 마음에 드는 설명글이 없어서 내가 하나 작성해 보려고 한다.
2022년 11월에 작성하고 있는 글이지만 상당히 오랜기간 유효한 내용이 아닐까 싶다.


암호화(暗號化)란?

먼저 “암호화“의 단어의 뜻에 대해 알아보도록 하자.
많은 사람들이 암호화를 제대로 구현하지 못하는 이유는, 단어의 뜻을 올바르게 이해하지 않고 구현하기 때문이다.

암(暗) : 어두울 암
호(號) : 부를 호

어둡게 부르는 것을 암호라고 한다.

 

몇가지 암호화의 예제를 알아보자.


원본 메세지(original message) : HELLO
암호화 메세지 : H1E1L1L1O1
암호화 방식 : 각 문자 뒤에 1 문자를 삽입.

단점 : 암호화 방식(1을 제거)을 알면 손쉽게 원본을 알 수 있음


원본 메세지(original message) : HELLO
암호화 메세지 : HLL
암호화 방식 : 원본 메세지에서 모음(AEIOU) 알파벳을 제거.

단점 : 원본 메세지가 손실됨. HOLLA 같은 메세지와 동일한 암호화 결과를 만들어내는 충돌(collision)문제가 있음.


원본 메세지(original message) : HELLO
암호화 메세지 : PEQQO
암호화 방식 : H -> P, L -> Q 로 교체.

단점 : 암호화 규칙(대응 교체)를 통해 원본 메세지를 쉽게 확인 가능


원본 메세지(original message) : HELLO
암호화 메세지 : OLLEH
암호화 방식 : 문자열을 역순으로 정렬

단점 : 다시 역순으로 정렬하면 원본 메세지를 쉽게 확인 가능.


위의 모든 방식이 다 암호화이다. 위의 파란 문자를 보고 원본을 알아낼 수 있겠는가?
한국에서는 “알아보기 힘들면” 다 암호화라고 간주한다.
이것이 많은 사람들이 암호화를 제대로 구현하지 못하는 이유이다.

한글의 암호화에 대응되는 영어 단어는 다음의 3가지이다.

 

한국어 단어 암호화에 대응하는 영어 단어

  • Obfuscation
  • Encryption
  • Hashing

 

암호화 메세지를 원본 메세지로 변환하는 것을 복호화 라고 한다.

암호화라는 단어와 다르게, 복호화와 대응되는 영어 단어하나 뿐이다.

 

한국어 단어 복호화에 대응하는 영어 단어

  • Decryption

 


글의 제목을 다시 생각해 보자.
올바른 암호화 방식” 이란 어떤 것일가?
이것은 암호화 하는 대상암호화 목표에 따라 달라진다.

 

Obfuscation (난독화)

한국에서 쓰이는 “암호화“의 단어 뜻은 “난독화“를 의미한다. 한국에서는 사람이 인지하기 어려우면 다 암호화 라고 부른다.
난독화는 읽기가 어려울 뿐, 적절한 해석기를 사용하면 원본 메세지의 의미를 알 수 있다. 적절한 해석기란 미리 공개되고 정의된 규칙 수행을 하는 프로그램을 뜻한다.

예시 : 아버지가방에들어가신다

예시 : 아스키 변환

예시 : Base64

base64는 진법 변환일 뿐이다. 사람이 이해하기 어렵지만 그 뿐이다.

 

난독화는 데이터 표현을 위해서 어쩔 수 없이 표시되어야 하지만, 사람이 쉽게 이해하는 것을 원하지 않을때 사용한다.

난독화 사용처

소스코드의 동작 공개를 원하지 않을때 사용. (하지만 잘 분석하면 결국에는 해독이 가능)
이미 암호화된 메세지를 한번 더 감출 때 사용. (봉투 암호화로 사용할 수 있다. 암호화는 비용이 많이 드는 작업이므로, 봉투암호화를 통해서 유효성 검사를 구현하면, 잘못된 요청을 한번 걸러낼 수 있다.)
개인정보암호난독화만 해서 전송/저장하지 마세요.

특히, 개인정보, 암호base64 로 사용해서 전송/저장 하는 경우가 많습니다. 절대 그렇게 하면 안됩니다.

 

Hashing

해싱은 무결성을 검증하기 위해서 개발되었다.

어떠한 길이의 값이 입력되어도, 고정된 길이의 결과가 출력된다.

 

 

Encryption

암호화는 메세지를 온전하게 전달하는

 


실전 예제

내가 작성한 코드를 공개된 프로그램에서 실행되어야 하지만 다른사람이 확인하는것은 막고 싶을때

- 난독화

 

비밀번호를 저장할 때 -> 해싱

핵심은 원본 메세지를 알 수가 없어야 한다는 것이다.

 

개인정보를 저장할 때 -> 암호화화식별이 불가능해야하고 원본을 확인해야할 때 사용한다.

단점은 검색이 안된다는 점이다. 지나친 일치를 막으라는 권고도 있다.

 

 


더 알아보기

해킹과 보안은 한끝 차이이다. IT업을 하다보면 다양한 취약한 코드를 경험하게 된다. 그것을 취약하지 않게 수정하면 보안이 되고, 악용(오용)하면 해킹이 된다.

해커의 마인드와 보안 관리자의 마인드를 모두 가지고 있는 것이 좋다.

자신이 해커라는 생각을 가지고 작업에 임할것.

 

비밀번호

원본 비밀번호 문자는 알아야할 필요가 없다. 그래서 반드시 해시 함수를 통해서 암호화 해야한다.

키 스트래칭 , 이니셜벡터, salt

 

레인보우테이블

 

브루트포스

 

알고리즘 종류

선택

 

코드 예제

pbkdf2-sha256

 

2 Comments

  1. 역시 글을 잘 쓰십니다.
    저도 많이 본받고 배우겠습니다.

    1. 부족한 글 읽어주셔서 감사합니다.
      goorm it 사이트 둘러봤는데 멋진것 같습니다!

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*