- Today
- Yesterday
- Total
메이쁘
[Hash][Encryption] Hash(해시) 와 Encryption(암호화) 알고리즘의 가장 큰 차이점은? 본문
[Hash][Encryption] Hash(해시) 와 Encryption(암호화) 알고리즘의 가장 큰 차이점은?
메이쁘 2020. 7. 1. 22:30안녕하세요.
Hash Table 이 아닌
암호화 해시 함수
그리고
Encryption(암호화) 알고리즘
두 방식의 간단한 정의 및 차이점에 대해 가볍지만 핵심을 담아 포스팅 하겠습니다.
암호화 Hash(해시) 함수, 그리고 Encryption(암호화)
- Hash
-> 해시 함수(해시 알고리즘) 을 이용하여 임의의 길이를 가진 데이터를 고정된 길이의 데이터로 맵핑하는 것.
-> 단방향 암호화 기법
즉, 임의의 길이 데이터 -> 고정된 길이 데이터 (암호화) 만 가능하고,
다시 고정된 길이 데이터 -> 임의의 길이 데이터 (복호화) 는 불가능하다.
-> MD5, SHA-1, SHA-256, SHA-512 알고리즘 등 이 있다.
반면,
- Encryption
-> 양방향 암호화 기법
즉, 평문(데이터) -> 암호화된 새로운 데이터 (암호화) 가 가능할 뿐 아니라
암호화된 데이터 -> 평문(기존 데이터) (복호화) 도 가능하다.
-> 수학적 과정을 통해 새롭지만 큰 의미가 없는 문장 으로 변환하는 알고리즘
-> 대표적으로 RSA 알고리즘이 있으며, 공개키와 개인키 등 암호화 키를 사용하여 암호화 / 복호화 를 한다.
여기서 드는 의문점
- 단방향 암호화 기법이면 해시 값에서 데이터를 절대 알아낼 수 없으니까 보안에 더 강하지 않나..?
- 그럼 해시는 실제로 어디에 사용되고 있을까?
- 아직 뚫린 해시 알고리즘은 없을까?
이에 대해, 해시를 좀 더 알아보겠습니다.
Hash(해시) 의 특징
Q. 단방향 암호화 기법이면 해시 값에서 데이터를 절대 알아낼 수 없으니까 보안에 더 강하지 않나..?
특징 1. 해커들이 무차별적으로 값을 해시로 변환한다면, 알아낼 수 있어 '무차별 공격' 에 취약하다.
특징 2. 특정 입력 값에 대해 같은 해시 함수를 사용한다면, 항상 같은 해시 값이 출력된다.
특징 3. 또한, 다른 입력 값이더라도 같은 해시 값이 출력될 수 있다. (아~~~주 극히 드물다.)
*** 실제로 무료 사이트 등에서도 해시 값 생성 / 변환 을 알아서 해준다.
https://www.convertstring.com/ko/Hash/SHA256
Q. 아직 뚫린 해시 알고리즘은 없을까?
실제로, MD5, SHA-1 해시 알고리즘이 뚫린 적이 있습니다.
*** 한 번 뚫리면, 앞으로는 그 알고리즘을 사용하지 않도록 권고하고 있으며 해당 알고리즘을 개발한 사람에게도 피해가 갈 수 있어 절대 안뚫리게 알고리즘을 짠다곤 합니다.
Q. 그럼 해시는 실제로 어디에 사용되고 있을까?
특징 4. 보통 비밀번호 자체를 DB에 넣지 않고, 해시 값으로 변경하여 저장해둔다.
특징 5. 또한, 메세지 인증 및 인증서 서명, 키 생성에도 사용된다.
허... 그럼 단순히 해시는 해시 함수(알고리즘) 만 사용하여 암호화 하면 끝인가요?
아닙니다.
실제로 해시를 보안성 강화로 사용하는 경우
솔트(Salt) 방법을 통해 한 층 견고하게 하는데요.
즉, 솔트(Salt) 란
음식에 소금을 치듯이
입력한 값에 특정 값(사용자가 직접 선정한 값. 예를 들어, 문자열 "1234") 을 원하는 위치(맨 앞, 맨 뒤, 중간 등)에 넣고
해시 함수를 사용하여 해시 값을 얻는 것 입니다.
예를 들어,
필자의 정보
- 아이디 : myid
- 비밀번호 : 1234
댓글달아주신 착한 사람의 정보
- 아이디 : chackhan
- 비밀번호 : 1234
라고 할 때, 어떤 해커가 DB에서 비밀번호 1234의 해시 값을 알아냈다고 했을 때
DB 테이블에서 밑으로 내리다보면 myid 와 chackhan 아이디의 비밀번호가 일치한다는 것 또한 쉽게 알 수 있겠죠?
그럼 일타쌍피! 하나의 해시 값으로 여러 사람의 개인정보까지 획득할 수 있습니다.
절대 안됩니다!
그래서!
해시 값을 저장할 때, 아이디 + 비밀번호 의 해시 값을 비밀번호로 저장합니다.
필자의 비밀번호 : myid1234 해시 값
착한 사람의 비밀번호 : chackhan1234 해시 값
결과가 당연히 다르겠죠?
이를 솔트(Salt) 라고 합니다.
이상, Hash와 Encryption에 대한 포스팅이었습니다.
둘 다 적재적소에 사용하면 좋을 듯 합니다.
감사합니다!
'면접 대비 CS지식 > else' 카테고리의 다른 글
[SW CS] 객체 지향 프로그래밍(OOP : Object-Oriented Programming) 은 무엇일까? (feat.절차적 프로그래밍) (0) | 2020.09.06 |
---|---|
[OS][language] signed 와 unsigned 의 차이 간단 비교 정리! (4) | 2020.07.11 |
[OS] MultiProgramming, MultiProcessing, MultiThreading, MultiTasking 간단 정의 및 차이점! (0) | 2020.07.09 |
[컴퓨터구조] CPU와 RAM, 그리고 ROM(HDD, SDD 등) 에 대한 깔끔 심플 정리!! (2) | 2020.07.08 |
[SW CS] MVC 패턴에 대해서(Feat. 디자인 패턴이란??) (2) | 2020.02.28 |