참고: https://www.encryptionconsulting.com/education-center/what-is-sha/
SHA 소개
SHA는 보안 해시 알고리즘입니다. SHA는 MD5를 수정한 버전이고 데이터 및 인증서를 해시하는 데 사용합니다. 해시 알고리즘은 입력 데이터를 비트 연산, 모듈러 합 및 압축 함수를 사용하여 알아보기 힘든 더 작은 형태로 줄입니다. 해싱을 크랙하거나 해독할 수 있는지 궁금할 것입니다. 해시는 암호화와 유사하며, 해시와 암호화의 유일한 차이점은 해시가 단방향이라는 것입니다. 즉, 일단 데이터를 해시해 놓으면 브루트 포스 공격을 하지 않는 한 해시 다이제스트를 크래킹할 수 없습니다. SHA 알고리즘의 작동에 대해서는 아래 이미지를 참조하기 바랍니다. SHA는 메시지의 문자 하나가 변경되더라도 다른 해시를 생성하는 식으로 작동합니다. 예를 들어, 비슷하지만 다른 두 메시지의 해싱, 즉 Heaven과 heaven은 다릅니다. 단지 대소문자의 차이만 있을 뿐입니다.
첫 번째 메시지는 SHA-1으로 해시되어 해시 다이제스트 "06b73bd57b3b938786daed820cb9fa4561bf0e8e"가 됩니다. 두 번째 유사한 메시지를 SHA-1으로 해시하면 해시 다이제스트는 "66da9f3b8d9d83f34770a14c38276a69433a535b"가 됩니다. 이것을 avalanche effect(눈사태 효과)라고 합니다. 이 효과는 암호학에서 중요합니다. 입력 메시지가 조금만 변경되어도 출력이 완전히 바뀌기 때문입니다. 이렇게 하면 공격자로 하여금 원래 해시 다이제스트가 무엇이었는지 이해할 수 없게 하고 메시지가 전송 중에 변경되었는지 여부를 메시지 수신자에게 알려줍니다.
또한 SHA는 원본 메시지가 변경되었는지를 밝히는 데 도움이 됩니다. 문자 하나라도 변경이 되었다면 원본 해시 다이제스트와 수신한 메시지의 해시 다이제스트가 완전히 다르기 때문에 변경 여부를 알 수 있습니다. SHA의 가장 중요한 부분 중 하나는 확정론적이라는 것입니다. 이는 사용된 해시 함수를 알면 모든 컴퓨터나 사용자가 해시 다이제스트를 다시 생성할 수 있음을 의미합니다. SHA의 확정성은 인터넷의 모든 SSL 인증서가 SHA-2로 해시되어야 하는 이유 중 하나입니다.
다양한 SHA의 형태
SHA 형태에 대해 학습하다 보면 여러 유형의 SHA를 볼 수 있습니다. SHA 이름의 예로는 SHA-1, SHA-2, SHA-256, SHA-512, SHA-224 및 SHA-384가 있지만 실제로는 SHA-1 및 SHA-2의 두 가지 유형만 있습니다. SHA-256과 같이 다른 큰 숫자가 들어간 이름은 SHA-2의 비트 길이를 사용한 SHA-2 버전일 뿐입니다. SHA-1은 원래 보안 해시 알고리즘으로 160비트 해시 다이제스트를 리턴합니다. 어떤 사람은 SHA-2가 SHA-1처럼 크랙될 수 있는지 궁금해합니다. 대답은 '예'입니다. SHA-1은 해시 다이제스트의 길이가 짧기 때문에 SHA-2보다 더 쉽게 브루트 포스에 크랙되지만 되지만 SHA-2 역시 브루트 포스에 크랙될 수 있습니다. SHA-1의 또 다른 문제는 160비트로 만들 수 있는 조합의 수가 매우 적기 때문에 동일한 해시 다이제스트를 두 개의 다른 값에 제공할 수 있다는 것입니다. 반면 SHA-2는 모든 다이제스트에 고유한 값을 부여하므로 모든 인증서는 SHA-2를 사용해야 합니다.
SHA-2는 256비트에서 512비트까지 다양한 길이를 생성할 수 있으므로 생성된 모든 해시 다이제스트에 완전히 고유한 값을 할당할 수 있습니다. collision(해시 충돌)은 두 값이 동일한 해시 다이제스트를 가질 때 발생합니다. SHA-1은 collision이 쉽게 생성되므로 공격자가 더 쉽게 두 개의 일치하는 다이제스트를 얻을 수 있고 원본과 다른 평문을 생성할 수 있습니다. SHA-1에 비해 SHA-2는 훨씬 더 안전하며 2016년 이후 모든 디지털 서명 및 인증서에 쓰도록 했습니다. 브루트 포스와 같은 일반적인 공격은 SHA-2 해시 다이제스트를 해독하는 데 수년 또는 수십 년이 걸릴 수 있으므로 SHA-2는 가장 안전한 해시 알고리즘으로 여겨지고 있습니다.
SHA의 용도와 이유
앞에서 언급했듯이 안전한 해시 알고리즘은 SSL/TLS 연결과 관련된 모든 디지털 서명 및 인증서에 필요하지만 SHA도 많이 사용됩니다. SSH, S-MIME(Secure/Multipurpose Internet Mail Extensions) 및 IPSec과 같은 애플리케이션도 SHA를 활용합니다. SHA는 암호를 해시하는 데도 사용하여 서버는 암호가 아닌 해시만 기억하면 됩니다. 이 방법을 사용하면 공격자가 모든 해시가 포함된 데이터베이스를 훔친다고 해도 모든 암호에 직접 액세스할 수 없고 암호를 사용하려면 해시를 크랙하는 방법도 찾아야 합니다. SHA는 파일의 무결성을 나타내는 지표로도 사용할 수 있습니다. 파일이 전송 중에 변경되었다면 수신자가 생성한 해시 다이제스트는 파일 소유자가 원래 생성하고 보낸 해시 다이제스트와 일치하지 않을 것입니다.
지금까지 SHA가 어떤 영역에 사용되는지 배웠습니다만 애초에 안전한 해시 알고리즘을 사용하는 이유는 무엇일까요? 일반적인 이유는 공격자를 막을 수 있는 능력 때문입니다. 브루트 포스 같은 공격으로 해시 다이제스트에서 일반 텍스트를 알아낼 수는 있지만 SHA가 이러한 전술을 매우 어렵게 만듭니다. SHA-2에 의해 해시된 암호는 해독하는 데 몇 년 에서 수십 년 까지 걸릴 수 있으므로 간단한 암호에 리소스와 시간을 낭비하게 함으로써 많은 공격자를 따돌릴 수 있습니다. SHA를 사용하는 또 다른 이유는 모든 해시 다이제스트의 고유성 때문입니다. SHA-2를 사용하는 경우 collision이 거의 없거나 전혀 없을 가능성이 높습니다. 즉, 메시지에서 한 단어만 변경해도 해시 다이제스트가 완전히 변경됩니다. 충돌이 거의 없거나 전혀 없기 때문에 공격자는 보안 해시 알고리즘을 깨는 패턴을 쉽게 찾을 수 없습니다. 이러한 이유로 SHA가 자주 사용됩니다.
해싱의 미래
현재 SHA-2는 해싱 알고리즘의 업계 표준이지만 미래에 SHA-3는 이를 무색하게 할 수 있습니다. SHA-3은 2015년에 SHA-1과 SHA-2를 만든 NIST에서 출시했지만 여러 가지 이유로 업계 표준이 되지 못했습니다. SHA-3가 릴리즈 됐을 때에 대부분의 회사는 SHA-1에서 SHA-2로 마이그레이션하는 중이었고 SHA-2가 여전히 매우 안전했기 때문에 SHA-3로 바로 전환하는 것은 의미가 없었습니다. 이와 함께 SHA-3는 SHA-2보다 느린 것으로 나타났지만 정확히 그렇지는 않습니다. SHA-3는 소프트웨어 측면에서는 느리지만 하드웨어 측면에서는 SHA-1과 SHA-2보다 훨씬 빠르며 매년 더 빨라지고 있습니다. 이러한 이유로 SHA-2가 안전하지 않거나 더 이상 사용하지 않게 된다면 SHA-3으로 이동하는 것을 보게 될 것입니다.
관련 글
'dev > javascript' 카테고리의 다른 글
[javascript] 자바스크립트 지수 연산자(제곱, Math.pow) (2) | 2023.03.20 |
---|---|
[javascript] 자바스크립트 debounce 함수 지연 시키기 (3) | 2023.03.19 |
[javascript] 자바스크립트 TTS (Text to Speech) (2) | 2023.03.16 |
[javascript] 자바스크립트 스크롤 캔버스 애니메이션 (애플 홈페이지) (5) | 2023.03.15 |
[javascript] 자바스크립트 문자열 찾기 (5) | 2023.03.15 |
댓글