728x90
✔️ Hashing
어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것
- 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다. -> 변환이 한 시간 걸린다면 로그인도 한 시간 걸린다는 뜻
- 최대한 같은 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.
- 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다.
✅ 대표적인 해싱 알고리즘
- MD(Message Digest) - MD4, MD5, MD6
- SHA(Secure Hash Algorithm) - SHA-1, SHA-256, SHA-512
- RIPEMD(RIPE Message Digest)
- WhirlPool
❗️ 이미 보안이 뚫린 해시 함수가 존재하므로 주의하여 사용해야 한다. ex) MD5, SHA-1, HAS-180
✔️ Salt
암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것
- 암호화만 해놓는다면 해시된 결과가 늘 동일하여 해시된 값과 원래 값을 테이블(레인보우 테이블)로 만들어서 디코딩해버리는 경우도 생긴다.
- 원본 값에 임의로 약속된 별도의 문자열을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본 값을 보호할 수 있도록 하는 안전장치이다.
❗️주의할 점
- Salt는 유저와 패스워드 별로 유일한 값을 가져야한다.
- 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 Salt값을 사용해서 해싱해야 한다.
- Salt는 절대 재사용하면 안 된다.
- Salt는 DB의 유저 테이블에 같이 저장되어야 한다.
단순하게 해시만 이용하여 변환만 한다고 안전한 것은 아니다.
해커가 무차별적으로 임의의 값을 입력하며 비밀번호를 알아낼 수 있다. 이런 점을 보완하기 위해 비밀번호에 솔트 값을 넣고, 해시 함수를 사용한다.
또는 해시 함수를 여러 번 돌리는 방법도 있다.
해시함수는 태생이 암호화를 위한 것이 아니라 검색을 빨리하기 위한 것이라 속도가 굉장히 빠르다.
그래서 고성능 컴퓨터를 이용하여 무차별적으로 대입해보기를 시도하면 1초에 약 10억 번 이상도 대입이 가능하다.
이를 방지하기 위해 강제적으로 1회 대입에 걸리는 시간을 높이는 방법도 있다.
ex) 로그인에 걸리는 시간을 0.2초가 걸리게 해 놓을 경우 사용자 입장에서는 느리게 느껴지지 않지만 1회에는 0.2초지만 10억 번 반복한다면 많은 시간이 걸린다
728x90
'개발일지 > 웹개발' 카테고리의 다른 글
세션(session)이란? (0) | 2022.11.23 |
---|---|
Cookie의 옵션들 (0) | 2022.11.22 |
Transaction (0) | 2022.11.15 |
REST API (0) | 2022.10.05 |
HTTP 요청 메서드 (0) | 2022.10.05 |