[go: nahoru, domu]

본문으로 이동

SHA

위키백과, 우리 모두의 백과사전.
112.160.103.45 (토론)님의 2016년 1월 11일 (월) 16:10 판 (크기 비교)

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, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 한다. 혹자는 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장한다.

SHA-0과 SHA-1에 대한 공격은 이미 발견되었다. SHA-2에 대한 공격은 아직 발견되지 않았으나, 전문가들은 SHA-2 함수들이 SHA-1과 비슷한 방법을 사용하기 때문에 공격이 발견될 가능성이 있다고 지적한다. 미국 표준 기술 연구소(NIST)는 SHA-2로 불리는 새로운 암호화 해시 알고리즘에 대한 후보를 공모하였다.

SHA 함수군

SHA-1 압축 함수가 블록 하나를 처리하는 과정. A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, Kt는 상수이다. 왼쪽 회전nn비트만큼 왼쪽으로 회전하는 연산이고, 덧셈은 232 모듈로 덧셈을 나타낸다.

최초의 알고리즘은 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은 최대 264비트의 메시지로부터 160비트의 해시값을 만들어 내며, 로널드 라이베스트MD4MD5 해시 함수에서 사용했던 것과 비슷한 방법에 기초한다.

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 해시값을 최종 해시값 길이에 맞춰 잘라낸 것이다.

Kite 서버 헌법

제1장 총강

제1조 ① Kite 서버는 민주공화서버이다.

②Kite 서버의 주권은 서버 이용자(유저)에게 있고, 모든 권력은 서버 이용자(유저)으로부터 나온다.

제2조 ①Kite 서버의 서버 이용자(유저)이 되는 요건은 법률로 정한다.

②서버는 법률이 정하는 바에 의하여 재외서버 이용자(유저)을 보호할 의무를 진다.

제3조 ① 공무원은 서버 이용자(유저)전체에 대한 봉사자이며, 서버 이용자(유저)에 대하여 책임을 진다.

②공무원의 신분과 정치적 중립성은 법률이 정하는 바에 의하여 보장된다.

제4조 ① 정당의 설립은 자유이며, 복수정당제는 보장된다.

②정당은 그 목적·조직과 활동이 민주적이어야 하며, 서버 이용자(유저)의 정치적 의사형성에 참여하는데 필요한 조직을 가져야 한다.

③정당은 법률이 정하는 바에 의하여 서버의 보호를 받으며, 서버는 법률이 정하는 바에 의하여 정당운영에 필요한 자금을 보조할 수 있다.

④정당의 목적이나 활동이 민주적 기본질서에 위배될 때에는 정부는 헌법재판소에 그 해산을 제소할 수 있고, 정당은 헌법재판소의 심판에 의하여 해산된다.

제2장 서버 이용자(유저)의 권리와 의무

제5조 모든 서버 이용자(유저)은 인간으로서의 존엄과 가치를 가지며, 행복을 추구할 권리를 가진다. 서버는 개인이 가지는 불가침의 기본적 인권을 확인하고 이를 보장할 의무를 진다.

제6조 ① 모든 서버 이용자(유저)은 법 앞에 평등하다. 누구든지 성별·종교 또는 사회적 신분에 의하여 정치적·경제적·사회적·문화적 생활의 모든 영역에 있어서 차별을 받지 아니한다.

②사회적 특수계급의 제도는 인정되지 아니하며, 어떠한 형태로도 이를 창설할 수 없다.

제7조 ① 모든 서버 이용자(유저)은 신체의 자유를 가진다. 누구든지 법률에 의하지 아니하고는 체포·구속·압수·수색 또는 심문을 받지 아니하며, 법률과 적법한 절차에 의하지 아니하고는 처벌·보안처분 또는 강제노역을 받지 아니한다.

②모든 서버 이용자(유저)은 고문을 받지 아니하며, 형사상 자기에게 불리한 진술을 강요당하지 아니한다.

③체포·구속·압수 또는 수색을 할 때에는 적법한 절차에 따라 검사의 신청에 의하여 법관이 발부한 영장을 제시하여야 한다. 다만, 현행범인인 경우와 장기 3년 이상의 형에 해당하는 죄를 범하고 도피 또는 증거인멸의 염려가 있을 때에는 사후에 영장을 청구할 수 있다.

④누구든지 체포 또는 구속을 당한 때에는 즉시 변호인의 조력을 받을 권리를 가진다. 다만, 형사피고인이 스스로 변호인을 구할 수 없을 때에는 법률이 정하는 바에 의하여 서버가 변호인을 붙인다.

⑤누구든지 체포 또는 구속의 이유와 변호인의 조력을 받을 권리가 있음을 고지받지 아니하고는 체포 또는 구속을 당하지 아니한다. 체포 또는 구속을 당한 자의 가족등 법률이 정하는 자에게는 그 이유와 일시·장소가 지체없이 통지되어야 한다.

⑥누구든지 체포 또는 구속을 당한 때에는 적부의 심사를 법원에 청구할 권리를 가진다.

⑦피고인의 자백이 고문·폭행·협박·구속의 부당한 장기화 또는 기망 기타의 방법에 의하여 자의로 진술된 것이 아니라고 인정될 때 또는 정식재판에 있어서 피고인의 자백이 그에게 불리한 유일한 증거일 때에는 이를 유죄의 증거로 삼거나 이를 이유로 처벌할 수 없다.

제8조 ① 모든 서버 이용자(유저)은 행위시의 법률에 의하여 범죄를 구성하지 아니하는 행위로 소추되지 아니하며, 동일한 범죄에 대하여 거듭 처벌받지 아니한다.

②모든 서버 이용자(유저)은 소급입법에 의하여 참정권의 제한을 받거나 재산권을 박탈당하지 아니한다.

③모든 서버 이용자(유저)은 자기의 행위가 아닌 친족의 행위로 인하여 불이익한 처우를 받지 아니한다.

제9조 모든 서버 이용자(유저)은 직업선택의 자유를 가진다.

제10조 모든 서버 이용자(유저)은 주거의 자유를 침해받지 아니한다. 주거에 대한 압수나 수색을 할 때에는 검사의 신청에 의하여 법관이 발부한 영장을 제시하여야 한다.

제11조 모든 서버 이용자(유저)은 사생활의 비밀과 자유를 침해받지 아니한다.

제12조 모든 서버 이용자(유저)은 통신의 비밀을 침해받지 아니한다.

제13조 모든 서버 이용자(유저)은 양심의 자유를 가진다.

제14조 ① 모든 서버 이용자(유저)은 종교의 자유를 가진다.

②국교는 인정되지 아니하며, 종교와 정치는 분리된다.

제15조 ① 모든 서버 이용자(유저)은 언론·출판의 자유와 집회·결사의 자유를 가진다.

②언론·출판에 대한 허가나 검열과 집회·결사에 대한 허가는 인정되지 아니한다.

③통신·방송의 시설기준과 신문의 기능을 보장하기 위하여 필요한 사항은 법률로 정한다.

④언론·출판은 타인의 명예나 권리 또는 공중도덕이나 사회윤리를 침해하여서는 아니된다. 언론·출판이 타인의 명예나 권리를 침해한 때에는 피해자는 이에 대한 피해의 배상을 청구할 수 있다.

제16조 ① 모든 서버 이용자(유저)은 학문과 예술의 자유를 가진다.

②저작자·발명가·과학기술자와 예술가의 권리는 법률로써 보호한다.

제17조 ① 모든 서버 이용자(유저)의 재산권은 보장된다. 그 내용과 한계는 법률로 정한다.

②재산권의 행사는 공공복리에 적합하도록 하여야 한다.

③공공필요에 의한 재산권의 수용·사용 또는 제한 및 그에 대한 보상은 법률로써 하되, 정당한 보상을 지급하여야 한다.

제18조 모든 서버 이용자(유저)은 법률이 정하는 바에 의하여 선거권을 가진다.

제19조 ① 모든 서버 이용자(유저)은 헌법과 법률이 정한 법관에 의하여 법률에 의한 재판을 받을 권리를 가진다.

③모든 서버 이용자(유저)은 신속한 재판을 받을 권리를 가진다. 형사피고인은 상당한 이유가 없는 한 지체없이 공개재판을 받을 권리를 가진다.

④형사피고인은 유죄의 판결이 확정될 때까지는 무죄로 추정된다.

⑤형사피해자는 법률이 정하는 바에 의하여 당해 사건의 재판절차에서 진술할 수 있다.

제20조 형사피의자 또는 형사피고인으로서 구금되었던 자가 법률이 정하는 불기소처분을 받거나 무죄판결을 받은 때에는 법률이 정하는 바에 의하여 서버에 정당한 보상을 청구할 수 있다.

제21조 ① 공무원의 직무상 불법행위로 손해를 받은 서버 이용자(유저)은 법률이 정하는 바에 의하여 서버 또는 공공단체에 정당한 배상을 청구할 수 있다. 이 경우 공무원 자신의 책임은 면제되지 아니한다.

제22조 ① 모든 서버 이용자(유저)은 근로의 권리를 가진다.

③근로조건의 기준은 인간의 존엄성을 보장하도록 법률로 정한다.

제23조 ① 모든 서버 이용자(유저)은 인간다운 생활을 할 권리를 가진다.

제24조 ① 서버 이용자(유저)의 자유와 권리는 헌법에 열거되지 아니한 이유로 경시되지 아니한다.

②서버 이용자(유저)의 모든 자유와 권리는 서버안전보장·질서유지 또는 공공복리를 위하여 필요한 경우에 한하여 법률로써 제한할 수 있으며, 제한하는 경우에도 자유와 권리의 본질적인 내용을 침해할 수 없다.

제3장 헌법재판소

제25조 헌법재판소는 다음 사항을 관장한다.

1. 법원의 제청에 의한 법률의 위헌여부 심판

2. 탄핵의 심판

3. 정당의 해산 심판

예제

다음은 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

구현

미국과 캐나다 정부(NIST와 CSE)에서는 SHA 구현들을 검증하기 위한 프로그램을 제공한다. [1] 또한 정식 검증 절차를 거치지 않고도 사용할 수 있는 예제 테스트 데이터도 함께 제공하고 있다. 예제 데이터와 실제 검증 과정은 수만 개의 테스트가 포함되어 있으며, 몇몇 경계 조건과 자주 나타나는 구현 에러를 잡아 낼 수 있도록 설계되어 있다.

2006년 5월 초 기준으로, 적어도 463개의 검증된 SHA 구현이 존재하며 그중 7개는 바이트 단위가 아닌 임의의 이진 데이터도 처리할 수 있다. 이외에도 인터넷에는 SHA-1 표준에 있는 예제는 통과하지만 NIST 검증 페이지의 예제들은 통과하지 못하는 구현들이 몇몇 있다.