SHA: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Chobot (토론 | 기여)
잔글 r2.6.5) (로봇이 바꿈: he:Secure Hash Algorithm
편집 요약 없음
1번째 줄:
{{다른 뜻 넘어옴|SHA}}
'''SHA'''(Secure Hash Algorithm, 안전한 해쉬해시 알고리즘) 함수들은 서로 관련된 [[암호학적 해쉬해시 함수]]들의 모음이다. 이들 함수는 [[미국 국가 안전 보장국]](NSA)이 [[1993년]]에 처음으로 설계했으며 [[미국]] 국가 표준으로 지정되었다. SHA 함수군에 속하는 최초의 함수는 공식적으로 '''SHA'''라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 '''SHA-0'''이라고도 불린다. 2년 후 SHA-0의 변형인 '''SHA-1'''이 발표되었으며, 그 후에 4종류의 변형, 즉 '''SHA-224''', '''SHA-256''', '''SHA-384''', '''SHA-512'''가 더 발표되었다. 이들을 통칭해서 '''SHA-2'''라고 하기도 한다.
 
SHA-1은 SHA 함수들 중 가장 많이 쓰이며, [[트랜스포트 레이어 보안|TLS]], [[SSL]], [[PGP (소프트웨어)|PGP]], [[SSH]], [[IPSec]] 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 [[MD5]]를 대신해서 쓰이기도 한다. 혹자는 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장한다.
 
SHA-0과 SHA-1에 대한 공격은 이미 발견되었다. SHA-2에 대한 공격은 아직 발견되지 않았으나, 전문가들은 SHA-2 함수들이 SHA-1과 비슷한 방법을 사용하기 때문에 공격이 발견될 가능성이 있다고 지적한다. 이들은 이제 새로운 해쉬해시 함수 표준을 위해 후보 함수들을 개발하고 있다.
 
== SHA 함수군 ==
10번째 줄:
[[파일:SHA-1.svg|thumb|right|300px|SHA-1 압축 함수가 블록 하나를 처리하는 과정. A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, K<sub>t</sub>는 상수이다. [[그림:lll.png|왼쪽 회전]]<sub>''n''</sub>은 ''n''비트만큼 왼쪽으로 회전하는 연산이고, [[파일:Boxplus.png|덧셈]]은 법 2<sup>32</sup>에 대한 덧셈을 나타낸다.]]
 
최초의 알고리즘은 [[1993년]]에 [[미국 표준 기술 연구소]](NIST)에 의해 '''안전한 해쉬해시 표준'''(Secure Hash Standard, [[연방 정보 처리 표준|FIPS]] PUB 180)으로 출판되었으며, 다른 함수들과 구별하려 보통 SHA-0이라고 부른다. 얼마 안 있어 NSA는 이 표준을 폐기했고, [[1995년]]에 개정된 알고리즘(FIPS PUB 180-1)을 새로 출판했으며 이를 SHA-1이라고 부른다. SHA-1은 SHA-0의 압축 함수에 비트 회전 연산을 하나 추가한 것으로, NSA에 따르면 이는 원래 알고리즘에서 암호학적 보안을 감소시키는 문제점을 고친 것이라고 하지만 실제로 어떤 문제점이 있었는지는 공개하지 않았다. 일반적으로 SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 있으며, 따라서 NSA의 주장은 어느 정도 설득력이 있다. SHA-0과 SHA-1은 최대 2<sup>64</sup>비트의 메시지로부터 160비트의 해쉬값을해시값을 만들어 내며, [[로널드 라이베스트]]가 [[MD4]] 및 [[MD5]] 해쉬해시 함수에서 사용했던 것과 비슷한 방법에 기초한다.
 
NIST는 나중에 해쉬값의해시값의 길이가 더 긴 네 개의 변형을 발표했으며, 이들을 통칭하여 SHA-2라 부른다. SHA-256, SHA-384, SHA-512는 [[2001년]]에 초안으로 처음으로 발표되었으며, [[2002년]]에 SHA-1과 함께 정식 표준(FIPS PUB 180-2)으로 지정되었다. [[2004년]] 2월에 [[삼중 DES]]의 키 길이에 맞춰 해쉬값해시값 길이를 조정한 SHA-224가 표준에 추가되었다. SHA-256과 SHA-512는 각각 32비트 및 64비트 워드를 사용하는 해쉬해시 함수이며, 몇몇 상수들이 다르긴 하지만 그 구조는 라운드의 수를 빼고는 완전히 같다. SHA-224와 SHA-384는 서로 다른 초기값을 가지고 계산한 SHA-256과 SHA-512 해쉬값을해시값을 최종 해쉬값해시값 길이에 맞춰 잘라낸 것이다.
 
=== 크기 비교 ===
19번째 줄:
 
{| class="wikitable"
! 알고리즘 !! 해쉬값해시값 크기 !! 내부 상태 크기 !! 블록 크기 !! 길이 한계 !! 워드 크기 !! 과정 수 !! 사용되는 연산 !! 충돌
|- align="center"
| '''SHA-0''' || 160 || 160 || 512 || 64 || 32 || 80 || +,and,or,xor,rotl || 발견됨
30번째 줄:
|}
 
여기서 내부 상태는 데이터 블록 하나를 압축한 뒤의 "내부적인 해쉬값해시값"의 크기를 나타낸다. 또한 SHA는 내부적으로 메시지 채움을 위해 데이터의 길이와 같은 추가적인 변수를 사용하며, 길이 한계는 이때 사용되는 변수의 크기를 나타낸다. 메시지 채움에 대한 자세한 설명은 [[머클-담고르 해쉬해시 함수]]를 참고하라.
 
== 예제 ==
 
다음은 SHA-1 해쉬값의해시값의 예제이다.
 
SHA1("The quick brown fox jumps over the lazy dog")
= 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
 
해쉬값은해시값은 [[눈사태 효과]] 때문에 메시지가 조금만 바뀌어도 완전히 바뀔 수 있다. 다음 예시는 위의 예제 끝에 마침표(.)를 찍은 것이다.
 
SHA1("The quick brown fox jumps over the lazy dog.")
= 408d94384216f890ff7a0c3528e8bed1e0b01621
 
빈 문자열의 해쉬는해시는 다음과 같다.
 
SHA1("") = da39a3ee5e6b4b0d3255bfef95601890afd80709