암호화(단방향, 양방향)

이주형·2022년 11월 30일
0

backend

목록 보기
27/53

정의

  • 평문(Plaintext) : 해독 가능한 형태의 메시지(암호화전 메시지)
  • 암호문(Cipertext) : 해독 불가능한 형태의 메시지(암호화된 메시지)
  • 암호화(Encryption) : 평문을 암호문으로 변환하는 과정
  • 복호화(Decryption) : 암호문을 평문으로 변환하는 과정

암호화의 종류

 Hash는 단방향 암호화 기법Encryption은 양방향 암호화 기법

  • 양방향 암호화 : 암호화와 복호화과정을 통해 송 ・ 수신 간 주고받는 메시지를 안전하게 암호화하고 평문으로 복호화하는 과정.

  • 단방향 암호화 : 해싱(Hashing)을 이용한 암호화 방식으로 양방향과는 다른 개념으로, 평문을 암호문으로 암호화는 가능하지만 암호문을 평문으로 복호화 하는 것은 불가능.

즉, Hash는 평문을 암호화된 문장(텍스트)으로 만들어주고, Encryption은 평문을 암호화된 문장(텍스트)로 만들어주는 기능을 하고 + 암호화된 문장을 다시 평문으로 만드는 복호화 기능도 합니다.

Hash(단방향 암호화)

단방향 해시 함수는 어떤 수학적 연산(또는 알고리즘)에 의해 원본 데이터를 매핑 시켜 완전히 다른 암호화된 데이터로 변환시키는 것을 의미한다. 이 변환을 해시라고 하며, 해시에 의해 암호화된 데이터를 다이제스트(digest)라고 한다.

Password 123456 을 해시 함수에 돌려서 다이제스트인 fs32a3xzz0 을 생성하고 해당 데이터를 DB 에 저장합니다.

1. Key Stretching

개발자가 횟수를 정해서 Hash 함수를 돌리는 방법이다. 그러나 Hash 함수를 여러 번 돌리는 만큼 최종 다이제스트를 얻는데 그만큼 시간이 소요되기 때문에 속도 면에서 불리하다.

2. Salt

여러 번 해시 함수를 돌리더라도 결국 몇 번 돌렸는지 횟수만 알게 된다면, 공격하는 입장에서 상징성 있는 대표 문자열들을 추려보면 충분히 공격이 가능하며, 또 같은 비밀번호를 사용하는 사용자들이 있다면 하나의 결과를 갖고도 다수 사용자의 password 를 알아낼 수 있끼때문에 이를 방지하기 위해 도입한 것이 바로 솔트이다. 솔트는 원문에 임의의 문자열을 붙이는 것이다. 이렇게 하면 다이제스틀 알아낸다 하더라도 password 를 알아내기 더욱 어려워지며, 사용자마다 다른 Salt 를 사용한다면 설령 같은 비밀번호더라도 다이제스트의 값은 달라집니다. 이는 결국 한 명의 패스워드가 유출되더라도 같은 비밀번호를 사용하는 다른 사용자는 비교적 안전하다.

0개의 댓글