이전 게시글에서 인증&인가에 대해서 다뤘었고 그 이후에 Session-Cookie 그리고 Token에 대해서 간단하게 다뤘었다.
하지만 사실상 가장 중요한건 인증 시 받은 회원의 정보를 어떻게 암호화하여 데이터베이스에 저장해야 안전한지 이다.
하지만 프로그래밍을 배운지 얼마 안된 입장에서 보안성 문제는 너무나 방대하고 경험치가 적다보니 어떤게 최선인지 아는 것은 한계가 있기 때문에 이번 게시글에서는 암호화가 무엇이고 어떤 것이 있는지만 간략하게 파악하고 넘어갈 예정이다.
입력된 평문(본래의 Input 값)을 암호화 할 수는 있지만 암호화된 평분을 복호화(복구) 하지 못하는 암호화 방식을 말하며 주로 Hash Algorithm이 여기에 속합니다.
=> 주로 저자서명
, 파일 또는 데이터 식별자
, 비밀번호
, 그리고 블록체인
등에 활용되고 있습니다.
Hash Algorithm을 통해 암호화를 진행 할 때 본래 input 값에 추가적으로 랜덤한 데이터를 더하여 암호화를 진행하는 방식
해시 값이 계산된 뒤, 그 해시 값을 또 다시 해시하고 또 이를 반복하는 방식입니다. 서비스마다 반복하는 횟수가 상이하지만 평균적으로 10번 정도 진행 합니다.
해시 알고리즘은 동일한 input에 대해 항상 동일한 해시 값을 가지고 있기 때문에 예측이 가능하며 이런 모든 가능성을 모아놓은 곳을 레인보우 테이블이라고 합니다. 이 테이블을 이용해 해킹하는 것을 레인보우 공격이라고 합니다.
단방향 암호화하는 다르게 복호화가 가능하며, 이중 대칭키 암호화는 인풋 값을 암호화 하는 과정에서 쓰인 보안키와 복호화하는 과정에서 쓰인 보안키가 동일한 암호화 방식을 뜻합니다.
비대칭이란 단어에서 알 수 있듯이 암호화 과정과 복호화 과정시에 필요한 보안키를 달리 사용하는 방식을 뜻하며 암호화 과정시 쓴 보안키를 퍼블릭 키 복호화 과정 중 사용한 보안키를 프라이빗키라고 합니다.