해시 생성기

아래에 텍스트를 입력하면 SHA-1, SHA-256, SHA-384, SHA-512 해시가 한 번에 생성되고, 키를 넣으면 HMAC으로 서명할 수 있습니다. Web Crypto API를 사용하며 모든 처리는 브라우저에서 로컬로 수행됩니다.

해시 함수에 대하여

암호화 해시 함수는 입력을 받아 고정 크기의 바이트 문자열을 생성합니다. 출력(해시)은 입력에 고유합니다 - 아주 작은 변경에도 완전히 다른 해시가 생성됩니다.

  • SHA-1 - 160비트, 보안 용도로는 더 이상 사용되지 않습니다. Git에서는 여전히 사용됩니다.
  • SHA-256 - 256비트, SHA-2 계열. 일반적인 용도에 권장됩니다.
  • SHA-384 - 384비트, SHA-2 계열. SHA-512의 절단된 변형입니다.
  • SHA-512 - 512비트, SHA-2 계열. 가장 강력한 표준 해시입니다.

이 페이지의 모든 다이제스트는 HMAC 서명까지 포함해 브라우저 자체의 Web Crypto API에서 나옵니다. 손으로 구현한 것은 하나도 없고, 아무것도 업로드되지 않습니다.

결과를 생각보다 크게 바꾸는 설정이 둘 있습니다. 문자 집합은 어떤 바이트를 해시할지 정하므로, 같은 문장이라도 UTF-8과 Windows-1252에서 다른 다이제스트가 나옵니다. 줄 끝 설정은 파일에서 나온 모든 것에 중요합니다. CRLF로 계산한 다이제스트는 LF로 계산한 것과 결코 일치하지 않기 때문입니다. 비교 칸에 체크섬을 붙여 넣으면 네 가지 중 어디서 나온 것인지 페이지가 알려 줍니다. 이름 없는 해시를 알아내는 가장 빠른 방법입니다.

그건 실제로 어떻게 저장하고 있나요

해시도 토큰도 비밀번호도 주변 코드만큼만 강합니다. 기본값 그대로 둔 비용 계수, 아무도 만료를 확인하지 않는 토큰, 저장소에 커밋된 비밀 키 같은 것들 말입니다. 저희는 애플리케이션을 점검하고 단단하게 만들며, 공격자가 가장 먼저 닿는 곳을 알려 드립니다.

보안 점검 예약하기

자주 묻는 질문

다른 도구와 해시 값이 왜 다른가요
거의 언제나 알고리즘이 아니라 바이트가 다르기 때문입니다. 끝의 줄바꿈 하나, LF 대신 CRLF, UTF-8이 아닌 Windows-1252로 인코딩된 텍스트가 모두 입력을 바꾸고 따라서 다이제스트도 바꿉니다. 이 페이지에 문자 집합과 줄 끝 설정이 있는 이유가 바로 그 차이를 드러내기 위해서입니다.
MD5는 어디로 갔나요
제거했습니다. MD5에는 실용적인 충돌 공격이 있어 공격자가 손댔을 수 있는 파일에 대해 아무것도 증명하지 못하며, 브라우저의 암호화 인터페이스가 제공하지도 않아 손으로 쓴 구현을 페이지에 지고 다녀야 했습니다. 새로 만드는 것에는 SHA-256이 합리적인 기본값입니다.
HMAC이란 무엇이고 언제 필요한가요
HMAC은 공유 비밀을 다이제스트에 섞어 넣어서, 키를 가진 쪽만 만들거나 확인할 수 있게 합니다. 웹훅 서명과 API 요청 서명에 쓰세요. 그런 곳에서는 일반 해시가 아무것도 증명하지 못합니다. 같은 본문이면 누구나 계산할 수 있으니까요.
실제로는 어떤 것을 써야 하나요
특별한 이유가 없다면 SHA-256입니다. SHA-512는 대부분의 용도에서 의미 있게 더 강하지는 않지만 64비트 하드웨어에서 더 빠르므로 역시 합리적인 기본값입니다. SHA-1이 여기 있는 이유는 기존 소프트웨어가 여전히 그것을 내놓기 때문이지 권장해서가 아닙니다. 실용적인 충돌 공격이 있으며 무언가를 지키는 데 써서는 안 됩니다.
입력한 텍스트가 서버로 가나요
아닙니다. 모든 다이제스트는 브라우저 안에서 계산되며, 그중 넷은 브라우저 자체의 암호화 인터페이스가 처리합니다. 입력한 것은 업로드되지 않으므로 토큰이나 설정 파일처럼 외부 서비스에 붙여 넣기 꺼려지는 것도 안심하고 해시할 수 있습니다.