해시를 통한 암호화
Hash(해시)란? 단방향 암호화 기법으로 해시 함수를 통해 암호화 된 문자열을 만드는 것을 의미합니다.
ex) SHA-256, Bcrypt ..
사용자의 패스워드는 평문으로 저장하는 것은 위험한 일입니다. 그렇기 때문에 보통 해시 함수를 통해 암호화를 진행하게 되는데, 이도 그렇게 안전한 것은 아닙니다. 공격자가 모든 평문을 해시화하여 대조를 하여 패스워드를 알아낼 수도 있다는 뜻입니다.
- 해커는 무한대로 공격을 한다면 어떤 암호화를 해도 패스워드를 알아낼 수 있을 것입니다.
- 하지만 해커들이 무한대로 공격을 할 수 있을까요? X
- 해독할 때 조금이라도 더 암호화를 해서 해커들에게 단 몇초라도 지연시킬 수 있다면 해커들에게는 치명적인 시간이 될 수 있습니다.
암호를 해독하는데 걸리는 시간
조합 가능한 모든 문자열을 대입하기 때문에 아무리 컴퓨터가 빠르다고 하더라도 시간이 매우 많이 걸린다. 당장 영문 소문자 + 숫자 조합만 쳐도 nn자리의 암호를 뚫는 데에는 O(36^n)의 시간이 걸린다. 즉, 10글자만 되어도 3610 = 3,656,158,440,062,976 가지가 된다. 이 정도면 쉬운 암호 알고리즘이라 해도 초당 1억 번 계산 기준 대충 14개월 걸리는 수준이다. 물론 암호가 더 복잡하거나 길이가 더 길어지면 수백~수천 년은 기본으로 기다려야 한다.
REFERENCE : https://namu.wiki/w/%EB%B8%8C%EB%A3%A8%ED%8A%B8%20%ED%8F%AC%EC%8A%A4#toc
Digest(다이제스트)란? 해싱을 통해 얻은 암호화된 데이터를 의미합니다.
하지만, 동일한 다이제스트..
같은 문자열을 해싱을 하면 동일한 다이제스트가 나오게 됩니다.
그렇기 때문에 그동안 구해놓은 다이제스트를 저장해둔 레인보우 테이블이라는 곳이 있습니다.
해커들은 이 곳을 참조하여 공격을 시도할 수 있습니다.
어떻게 하면 해커들이 해독하기 힘들게 할 수 있을까요?
두 가지 방법이 있습니다.
- 해싱을 여러번 반복하는 방법
- Salt라는 임의의 값을 붙여서 해싱하는 방법
(물론 둘 다 사용하면 더 좋습니다.)
Salt란?
Salt? 소금? 사용자의 암호를 그대로 해시를 한다면 브루트 포스 공격을 통해서 패스워드가 쉽게 노출될 가능성이 있습니다.
소금을 친다라는 뜻으로, 임의의 문자를 패스워드 뒤에 붙여서 해싱을 하면 암호화된 문자열을 복호화하는데 성공한다해도 Salt값이 섞여있기 때문에 기존의 패스워드를 찾기 어려울 것입니다.
Salt는 해싱을 하기전에 원문에 임의의 문자열을 붙이는 것을 의미합니다.
Salt + 여러번 해싱하기
해싱을 몇번을 반복했는지도 해커들이 해독하는데 조금의 시간을 지연시킬 수 있습니다.
패스워드에 Salt를 붙여 해싱을 N번을 반복하면 더욱 더 알아내기 어려운 다이제스트를 얻을 수 있습니다.
해싱을 여러번 하는 것을 Key Stretching(키 스트레칭)이라고 합니다.
REFERENCES
감사합니다.
해시를 통한 암호화
Hash(해시)란? 단방향 암호화 기법으로 해시 함수를 통해 암호화 된 문자열을 만드는 것을 의미합니다.
ex) SHA-256, Bcrypt ..
사용자의 패스워드는 평문으로 저장하는 것은 위험한 일입니다. 그렇기 때문에 보통 해시 함수를 통해 암호화를 진행하게 되는데, 이도 그렇게 안전한 것은 아닙니다. 공격자가 모든 평문을 해시화하여 대조를 하여 패스워드를 알아낼 수도 있다는 뜻입니다.
- 해커는 무한대로 공격을 한다면 어떤 암호화를 해도 패스워드를 알아낼 수 있을 것입니다.
- 하지만 해커들이 무한대로 공격을 할 수 있을까요? X
- 해독할 때 조금이라도 더 암호화를 해서 해커들에게 단 몇초라도 지연시킬 수 있다면 해커들에게는 치명적인 시간이 될 수 있습니다.
암호를 해독하는데 걸리는 시간
조합 가능한 모든 문자열을 대입하기 때문에 아무리 컴퓨터가 빠르다고 하더라도 시간이 매우 많이 걸린다. 당장 영문 소문자 + 숫자 조합만 쳐도 nn자리의 암호를 뚫는 데에는 O(36^n)의 시간이 걸린다. 즉, 10글자만 되어도 3610 = 3,656,158,440,062,976 가지가 된다. 이 정도면 쉬운 암호 알고리즘이라 해도 초당 1억 번 계산 기준 대충 14개월 걸리는 수준이다. 물론 암호가 더 복잡하거나 길이가 더 길어지면 수백~수천 년은 기본으로 기다려야 한다.
REFERENCE : https://namu.wiki/w/%EB%B8%8C%EB%A3%A8%ED%8A%B8%20%ED%8F%AC%EC%8A%A4#toc
Digest(다이제스트)란? 해싱을 통해 얻은 암호화된 데이터를 의미합니다.
하지만, 동일한 다이제스트..
같은 문자열을 해싱을 하면 동일한 다이제스트가 나오게 됩니다.
그렇기 때문에 그동안 구해놓은 다이제스트를 저장해둔 레인보우 테이블이라는 곳이 있습니다.
해커들은 이 곳을 참조하여 공격을 시도할 수 있습니다.
어떻게 하면 해커들이 해독하기 힘들게 할 수 있을까요?
두 가지 방법이 있습니다.
- 해싱을 여러번 반복하는 방법
- Salt라는 임의의 값을 붙여서 해싱하는 방법
(물론 둘 다 사용하면 더 좋습니다.)
Salt란?
Salt? 소금? 사용자의 암호를 그대로 해시를 한다면 브루트 포스 공격을 통해서 패스워드가 쉽게 노출될 가능성이 있습니다.
소금을 친다라는 뜻으로, 임의의 문자를 패스워드 뒤에 붙여서 해싱을 하면 암호화된 문자열을 복호화하는데 성공한다해도 Salt값이 섞여있기 때문에 기존의 패스워드를 찾기 어려울 것입니다.
Salt는 해싱을 하기전에 원문에 임의의 문자열을 붙이는 것을 의미합니다.
Salt + 여러번 해싱하기
해싱을 몇번을 반복했는지도 해커들이 해독하는데 조금의 시간을 지연시킬 수 있습니다.
패스워드에 Salt를 붙여 해싱을 N번을 반복하면 더욱 더 알아내기 어려운 다이제스트를 얻을 수 있습니다.
해싱을 여러번 하는 것을 Key Stretching(키 스트레칭)이라고 합니다.
REFERENCES
감사합니다.