수업/Digital Design & Lab

SHA-256

hw-ani 2022. 12. 26. 13:03

SHA-256 회로를 verilog로 설계하는게 디지털설계및실험 과목의 마지막 과제로 나왔다.

이를 설계하기 위해 공부했던 SHA-256 연산 과정을 간단하게 정리해볼까한다.


SHA와 SHA-256이 무엇인지에 대한건 나무위키 보면 잘 나와있으니 생략하고..
어떤 식으로 input을 암호화하는지 살펴보자.


진행하며 참고한 문서는 다음과 같다. 참고문서

 

Algorithm(간략)

우선 큰 틀부터 보자.
SHA-256 algorithm에선 0보다 크거나 같고 2^64-bit 보다 작은 Message(표현은 16진수로 하기도 하고 ascii 문자로 하기도 함)라는 것을 Input으로 받고, 256-bit 2진수 숫자(마찬가지로 표현은 16진수로하거나 ascii문자로 하거나)를 Output으로 내놓는다.
즉, Input 길이는 가변적이지만, Output은 256-bit로 항상 고정이다.

제일 처음 2^64-bit 보다 작은 Message를 받으면 이를 512-bit 단위의 block들로 가공(?)한다.
가공하는 방법은 아래와 같다.
우선 block에 input을 쭉 채우고, 그 뒤에 1비트 "1"을 넣은 다음, bit 개수가 512의 배수가 되도록 0으로 뒤를 채운다. 이때 마지막 64비트에는 input 길이 정보를 넣기 때문에 그 부분은 빼고 0으로 채워야한다.
좀 더 엄밀하게 말하자면, 우선 input을 채우고, 1비트 1을 input 끝에 추가하고, (L+1+k)mod512가 448이 되도록 하는 최솟값 k만큼 0을 채운다.(L은 input 비트 개수) 이후 L 값을 2진수 형태 64비트로 block의 가장 끝에 추가한다.
예를들어 "abc"라는 input을 줬다고 해보자. 문자 하나테 8비트이므로 총 24비트를 우선 채운다. 그 뒤에 1을 넣고, 423개의 0을 그 뒤에 추가한다. 마지막으로 끝에 64비트 000...011000 을 추가한다.

 

input 최대 길이가 2^64-bit인건 상당이 큰 숫자다. 이는 2EiB로 2014년 기준 facebook data warehouse 용량의 7배라고 한다.
text 형태의 메시지를 512-bit 블록들로 가공한 결과는 https://sha256algorithm.com/ 에서 확인해볼 수 있다.

 


위와 같이 input을 N개의 512-bit block들로 바꾸고나면, 이제 아래 식을 이용해 각 block에 대해 (각 Block을 이용해) W 값 64개를 구한다.
W 값은 block 별로 64개씩 존재한다.

M 기호의 의미는 다음과 같다. 위에서 우리는 Message를 input으로 받아서 N개의 512-bit block들로 만들었는데, M에 붙은 (i)는 i번째 512-bit block 하나를 의미하고, t는 그 i번째 512-bit block을 32-bit 덩어리 16개로 잘랐을때의 t번째 32-bit 한덩어리를 말한다.
시그마 함수의 의미는 아래와 같다.



이렇게 만들어진 W 64개와, 주어진 상수 T값 64개(아래 참고)를 이용해 초기 H값 8개(아래 참고)주어진 연산(아래 참고)총 64번 반복한다.

상수 K값 64개
초기 H 값

 

이 식을 총 64번 반복하면 된다. a~h의 초기값은 바로 위 H^0을 이용한다.

 

바로 위 수식이 메인이다. a~h를 초기화 한 후 위 식을 64번 반복하면 된다.

위 연산 식에 등장하는 함수들의 의미는 아래와 같다.



위 연산을 64번 반복하여 마지막 결과로 나온 a~h값들을 가지고 아래 연산(아래 참고)을 진행하면 다음 H 값이 나온다. 그럼 이제 다음 Message block의 W값 64개를 가지고 다시 위 식을 64번 반복하면 된다. 다음 message block에 대해 진행할때는 이전 단계의 H 값으로 a~h를 초기화하고 시작한다.
이 과정을 N개 blocks에 대해 계속 진행한다.


총 N개의 blocks에 대해 위 연산을 마치고 나면 나오는 최종 H 값들을 이어붙이면 결과 값이 나온다.

간단하게 설명하려다보니 빠진 내용이나 올바르지 못한 내용이 있을 수 있음. 초반에 언급한 참고문서보면 좋음.

'수업 > Digital Design & Lab' 카테고리의 다른 글

Verilog 기초  (0) 2022.10.30
간단한 컴퓨터 구조와 HDL  (2) 2022.09.05