도구함9696.kr

비밀번호, 해시, 암호화는 각각 무엇인가

해시, 암호화, 인코딩은 비슷해 보이지만 목적이 전혀 다릅니다. 이 셋을 구분하면 보안 관련 안내문을 읽을 때 무슨 말인지 감이 잡힙니다.

인코딩: 되돌릴 수 있는 표현 변경

Base64가 대표적입니다. 데이터를 다른 형태로 바꿔 표현할 뿐, 누구나 되돌릴 수 있습니다. 비밀을 지키는 기능이 전혀 없습니다. Base64로 감싼 문자열을 보고 암호화됐다고 생각하는 것은 흔한 오해입니다. 인코딩의 목적은 보안이 아니라 호환성입니다.

해시: 되돌릴 수 없는 지문

해시는 어떤 데이터든 고정 길이의 값으로 요약합니다. 핵심 성질은 되돌릴 수 없다는 것입니다. 원본에서 해시를 만들 수는 있어도 해시에서 원본을 복원할 수는 없습니다. 그리고 내용이 아주 조금만 달라도 결과가 완전히 달라집니다.

그래서 두 가지에 쓰입니다. 하나는 파일이 손상 없이 그대로인지 확인하는 것입니다. 프로그램 배포 페이지에 적힌 SHA-256 값과 내가 받은 파일의 해시를 비교하면 됩니다. 다른 하나는 서비스가 비밀번호를 저장하는 방식입니다. 제대로 만든 서비스는 비밀번호 자체가 아니라 해시를 저장하기 때문에, 비밀번호를 잊었을 때 알려주지 못하고 재설정만 시켜줍니다. 원래 비밀번호를 그대로 알려주는 서비스가 있다면 위험 신호입니다.

암호화: 열쇠가 있으면 되돌릴 수 있음

암호화는 내용을 읽을 수 없게 만들되, 올바른 열쇠(비밀번호)가 있으면 원래대로 되돌릴 수 있습니다. 해시와의 결정적 차이가 이 되돌림 가능성입니다. 비밀을 지키면서도 정당한 사람은 읽어야 할 때 씁니다.

정리하면 이렇습니다. 되돌리면 안 되는 것은 해시(비밀번호 저장, 무결성 확인), 열쇠로만 되돌려야 하는 것은 암호화(비밀 전달, 보관), 아무나 되돌려도 되는 것은 인코딩(형식 변환)입니다.

안전한 비밀번호의 조건

복잡한 기호를 섞는 것보다 길이가 중요합니다. 특수문자를 섞은 8자리보다 평범한 단어 네 개를 이은 20자리가 훨씬 안전합니다. 계산 공격은 경우의 수를 상대하는데, 길이가 늘면 경우의 수가 기하급수적으로 커지기 때문입니다.

그리고 아무리 좋은 비밀번호도 여러 곳에 돌려쓰면 의미가 없습니다. 한 서비스가 털리면 나머지가 전부 열립니다. 비밀번호 생성기로 사이트마다 다른 비밀번호를 만들고, 비밀번호 관리 프로그램에 맡기는 방식이 현실적인 해법입니다. 사람이 외울 수 있는 비밀번호의 개수에는 한계가 있습니다.