암호·해시

정보처리실무 · 보안

이 페이지의 목차

학습 목표

기밀성·인증·무결성과 키·블록·출력 길이를 따로 기억한다.

본문

핵심 이론

대칭키는 같은 비밀키로 암복호화하고 공개키 방식은 공개키·개인키 쌍을 사용한다. B만 읽게 하려면 B의 공개키로 암호화하고 B의 개인키로 복호화한다. 전자서명은 서명자의 개인키로 생성하고 공개키로 검증한다.

전자서명은 무결성과 출처 인증을 제공하며 파일 자체의 기밀성을 자동 제공하지 않는다. 해시는 고정 길이 요약값이며 복호화 절차가 아니다. 충돌 저항성은 서로 다른 두 입력의 동일 해시를 찾기 어려운 성질이다.

AES는 블록 128비트, 키 128·192·256비트다. DES는 블록 64비트·유효 키 56비트, IDEA는 블록 64비트·키 128비트, Skipjack은 블록 64비트·키 80비트다. 길이 비교는 학습용이며 오래된 알고리즘을 신규 보안 설계에 권장하는 의미가 아니다.

MD5 출력은 128비트, SHA-256은 256비트다. 바이트 수는 비트/8, 16진수 문자 수는 비트/4다. 솔트는 비밀번호 해시의 계정별 무작위 값으로 공통 사전 계산 재사용을 어렵게 한다.

모든 n명 쌍마다 별도 대칭키를 쓰면 키 수는 n(n−1)/2다. 키 관리 방식이 달라지면 이 공식을 그대로 적용하지 않는다.

개념 도식

전체 맞춤새 창 보기
암호·해시의 관계와 흐름을 보여 주는 도식

무엇을 보호하려는지부터 정한다

대칭키 암호는 같은 비밀키로 암호화·복호화하고, 공개키 암호는 서로 연결된 공개키·개인키를 사용한다. 해시는 입력을 고정 길이 요약값으로 바꾸며 암호문처럼 키로 원문을 복원하는 절차가 아니다. 암호화와 해시를 모두 ‘암호 알고리즘’으로 뭉뚱그려 답하지 않는다.

기밀 메시지를 B만 읽게 하려면 기본 공개키 모델에서 B의 공개키로 암호화하고 B의 개인키로 복호화한다. 서명은 서명자의 개인키로 만들고 신뢰할 수 있는 서명자 공개키로 검증한다. 방향이 다른 이유는 각각 수신자만 읽기와 발신자 확인을 목표로 하기 때문이다.

숫자 의미예
키 길이AES-256의 256비트
기본 블록 길이AES는 128비트
해시 출력 길이SHA-256은 256비트 = 32바이트

256비트 해시를 16진수로 쓰면 한 자리 4비트이므로 64문자다. 솔트는 계정별 무작위 입력을 더해 동일 비밀번호의 공통 해시 재사용을 어렵게 한다. 충돌 저항성은 서로 다른 두 입력의 같은 해시를 찾기 어려운 성질이다. 해시 일치만으로 발신자 신원이 인증되는 것은 아니다.

풀이 예시

서버는 사용자가 같은 비밀번호를 설정하더라도 각 계정마다 서로 다른 무작위 값을 비밀번호와 함께 비밀번호 해시 함수에 입력하고 그 값도 저장한다. 미리 계산한 공통 해시 목록의 재사용을 어렵게 하려는 이 계정별 무작위 값의 이름을 쓰시오.

정답과 풀이 보기

예시 정답

예시·텍스트
솔트

풀이 과정

계정별 솔트를 사용하면 같은 비밀번호도 서로 다른 해시 결과를 갖게 할 수 있다. 솔트 자체를 반드시 비밀로 숨길 필요는 없지만 안전한 비밀번호 전용 해시 알고리즘과 충분한 작업 비용도 필요하다.

알고리즘의 이름·분류·길이

구분대표 이름식별할 특징
대칭키 블록 암호DES블록 64비트, 유효 키 56비트. 키 표현의 패리티 비트와 유효 키를 구별한다.
대칭키 블록 암호IDEA블록 64비트, 키 128비트
대칭키 블록 암호Skipjack블록 64비트, 키 80비트
대칭키 블록 암호AES블록은 항상 128비트. 키 길이에 따라 AES-128·192·256으로 나뉜다.
공개키 암호 계열RSA·ECC공개키와 개인키를 구별한다. RSA는 정수 소인수분해와 관련된 구조, ECC는 타원곡선 점 연산을 이용하는 계열이다.
키 없는 해시 함수MD5·SHA-256MD5 출력은 128비트, SHA-256 출력은 256비트다. 복호화용 키로 원문을 되찾는 암호화 절차와 다르다.

비트 길이와 표현 길이도 구별한다. 256비트는 32바이트이고 구분자 없는 16진수로는 64문자이다. DES·IDEA·Skipjack·MD5의 규격 식별을 학습한다고 해서 새 보안 설계에 이 알고리즘을 권장한다는 뜻은 아니다. 특히 MD5에는 충돌 공격이 알려져 있다.

복습 문제

답을 생각한 뒤 정답과 근거를 펼쳐 보세요.

01

비밀번호 저장에 단순 고속 해시만 쓰면 같은 비밀번호가 같은 값으로 보이는 문제를 무엇으로 줄이는가?

정답과 근거

사용자별 무작위 salt와 비밀번호 전용의 비용 조절 가능한 해시를 사용한다.

02

해시값으로 원문을 복호화할 수 있는가?

정답과 근거

해시는 복호화를 전제로 한 암호화가 아니다. 다만 약한 입력은 대입 공격으로 추측될 수 있다.