LSH(해시 함수)

LSH (hash function)

LSHPC, 스마트기기 등 범용 소프트웨어 환경에서 무결성을 제공하기 위해 2014년 우리나라가 설계한 암호해시함수다.[1] LSH는 한국암호화모듈검증프로그램(KCMVP)이 승인한 암호 알고리즘 중 하나이다. 그리고 대한민국의 국가표준(KS X 3262)이다.

사양

해시함수 LSH의 전체적인 구조는 다음 그림과 같다.

LSH의 전반적인 구조

해시함수 LSH는 0이 1인 패딩으로 광파이프 머클담그리드 구조를 갖췄다. LSH의 메시지 해싱 프로세스는 다음의 3단계로 구성된다.

  1. 초기화:
    • 지정된 비트 문자열 메시지의 01 패딩.
    • 패딩된 비트 문자열 메시지에서 32단어 배열 메시지 블록으로 변환.
    • 초기화 벡터를 사용한 체인 변수 초기화.
  2. 압축:
    • 메시지 블록을 사용한 압축 함수를 반복하여 체인 변수 업데이트.
  3. 최종화:
    • 최종 체인 변수에서 } -bit 해시 값 생성.
  • 함수 해시 함수 LSH
  • 입력: 비트 문자열 m
  • 출력: 해시 값 ,
  • 절차

{\} 원제로 패딩(m

Generation of message blocks , where from the padded bit string

을 위해 하다

을 위해 끝나다.

돌아오다

해시함수 LSH의 사양은 다음과 같다.

해시함수 LSH 사양
알고리즘. 다이제스트 크기(비트)( n 스텝 함수 수( s 체인 변수 크기(비트) 메시지 블록 크기(비트) 단어 크기(비트)( w
LSH-256-224 224 26 512 1024 32
LSH-256-256 256
LSH-512-224 224 28 1024 2048 64
LSH-512-256 256
LSH-512-384 384
LSH-512-512 512

초기화

을(를) 지정된 비트 문자열 메시지로 설정하십시오. The given is padded by one-zeros, i.e., the bit ‘1’ is appended to the end of , and the bit ‘0’s are appended until a bit length of a padded message is , where and x(는) x 이상 최소 정수임

let = ( w - \-bit string. Then is considered as a -byte array , where for 모두 ( 4 - ) 0 -byt 어레이 는 다음과 같이 32t M ( [ ,, [ - 1된다.

word array 에서 다음과 같이 t 32단어 어레이 메시지 블록{( = - 을 정의한다

16단어 어레이 체인 변수 ( 0) {CV 초기화 벡터 {\textsf 에 초기화됨.

초기화 벡터 {(는) 다음과 같다. 다음 표에서 모든 값은 16진수 형식으로 표현된다.

LSH-256-224 초기화 벡터
068608D3 62D8F7A7 D76652AB 4C600A43 BDC40AA8 1ECA0B68 DA1A89BE 3147D354
707EB4F9 F65B3862 6B0B2ABE 56B8EC0A CF237286 EE0D1727 33636595 8BB8D05F
LSH-256-256 초기화 벡터
46A10F1F FDDCE486 B41443A8 198E6B9D 3304388D B0F5A3C7 B36061C4 7ADBD553
105D5378 2F74DE54 5C2F2D95 F2553FBE 8051357A 138668C8 47AA4484 E01AFB41
LSH-512-224 초기화 벡터
0C401E9FE8813A55 4A5F446268FD3D35 FF13E452334F612A F8227661037E354a
A5F223723C9CA29D 95D965A11AED3979 01E23835B9AB02CC 52D49CBAD5B30616
9E5C2027773F4ED3 66A5C8801925B701 22BBC85B4C6779D9 C13171A42C559C23
31E2B67D25BE3813 D522C4DEED8E4D83 A79F5509B43FBAFE E00D2CD88B4B6C6a
LSH-512-256 초기화 벡터
6DC57C33DF989423 D8EA7F6E8342C199 76DF8356F8603AC4 40F1B44DE838223a
39FE7CFC31484CD 39C4326CC5281548 8A2FF85A346045D8 FF202AA46DBDD61E
CF785B3CD5FCDB8B 1F0323B64A8150BF FF75D972F29EA355 2E567F30BF1CA9E1
B596875BF8FF6DBA FCA39B089EF4615 ECFF4017D020B4B6 7E77384C772ED802
LSH-512-384 초기화 벡터
53156A66292808F6 B2C4F362B204C2기원전 B84B7213BFA05C4E 976CEB7C1B299F73
DF0CC63C0570AE97 DA4441BAA486CE3f 6559F5D9B5F2ACC2 22DACF19B4B52A16
BBCDACEFDE80953a C9891A2879725B3e 7C9FE6330237E440 A30BA550553F7431
BB08043FB34E3E30 A0DEC48D54618EAD 150317267464BC57 32D1501FDE63DC93
LSH-512-512 초기화 벡터
ADD50F3C7F07094E E3F3CEE8F9418A4f B527ECDE5B3D0AE9 2EF6DEC68076F501
8CB994CAE5ACA216 FBB9EAE4BBA48CC7 650A526174725FEA 1F9A61A73F8D8085
B6607378173B539b 1BC99853B0C0B9ED DF727FC19B182D47 DBEF360CF893A457
4981F5E570147E80 D00C4490CA7D3E30 5D73940C0E4AE1EC 894085E2EDB2D819

압축

단계에서는 초기화 단계의 m 에서 생성되는 displaystyle {{의 32단어 어레이 메시지 블록을 압축함수의 반복으로 압축한다 The compression function has two inputs; the -th 16-word chaining variable and the -th 32-word message block . And it returns the -th 16-word chaining variable . Here and subsequently, denotes th t 1 에 대한 모든 t t -word 배열 집합

압축함수에 사용되는 기능은 다음과 같다.

  • 메시지 확장 함수 :W → W + 1) { 화살표
  • 메시지 추가 함수 : W W → W {\ {\
  • 함수 j: W → W {
  • Word-permution 함수 : W

압축함수의 전체적인 구조는 다음 그림과 같다.

LSH 압축함수

In a compression function, the message expansion function generates 16-word array sub-messages from given . Let be a temporary 16-word array set to the -th chaining variable . The -th step function having two inputs and updates , i.e., . All step functions are proceeded in order . Then one more operation by is proceeded, and the -th chaining variable is set to . The process of a compression function in detail is as follows.

  • 함수 압축 함수
  • input: The -th chaining variable and the -th message block
  • 출력:(+ ) -th chaining 변수 + 1) CV}^{( {
  • 절차

을 위해 하다

을 위해 끝나다.

돌아오다

여기에 -th 번째 단계 함수 : W 화살표 다음과 같다.

다음 그림은 압축함수의 -step 함수 j 을(를) 보여준다.

-th번째 단계 함수

메시지 확장 함수 MsgExp

( )=( ( )=( ) [ 0 , M()[ 을(를)로 두십시오 The message expansion function generates 16-word array sub-messages from a message block The first two sub-messages and 은(는) 다음과 같이 정의된다.

The next sub-messages 은(는) 다음과 같이 생성된다.

여기서 }은는) 다음과 같이 정의된 {Z에 대한 순열이다.

순열 : Z → Z 화살표
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 2 0 1 7 4 5 6 11 10 8 9 15 12 13 14

메시지 추가 기능 MsgAdd

For two 16-word arrays and , the message addition function 화살표 는 다음과 같이 정의된다.

믹스 함수 믹스

-th 혼합 함수 : W {{{W\mathcal}}^{16}\rightarrow{{W\mathcal}}^{16}}모든two-word 한켤레를 혼합하여;(0≤ 나는<>8){\displaystyle(0\leq l< 8)}을 위한 T[나는]{T[나는]\displaystyle}과 T[는 a=l+8]{T[l+8]\displaystyle}은16-word 배열 T=({\displaystyle{\textsf{T}}=(T[0],\ldots ,T[15])}을 업데이트한다. 들어 < 혼합 함수 는 다음과 같이 진행한다.

여기서 , 두 단어의 믹스함수다. 을(를) 단어로 한다. 2단어 혼합함수 j, : 2→ W 화살표 2}}: 다음과 같이 정의된다.

  • 함수 2단어 혼합 함수 j, {
  • 입력: 워드 Y
  • 출력: 워드 Y
  • 절차

X Y

X [ X;

Y Y {\β j {\ \ ;

X Y {\ \Y^{\ \_

X Y

2단어 j , l 는 다음 그림과 같다.

두 단어 혼합 함수 , (, Y ) {

에는 j , {\displaystyle {\j}, l 에 사용되는 비트 회전량이 나와 있다.

비트 회전량
32 짝수 29 1 0 8 16 24 24 16 8 0
기묘한 5 17
64 짝수 23 59 0 16 32 48 8 24 40 56
기묘한 7 3

The -th 8-word array constant used in for is defined as follows. 초기 8단어 어레이 상수 =( [ , S [ ) 은 다음 표에 정의되어 있다. 1≤ j<>;Ns{\displaystyle 1\leq j&lt을 말한다.⊞ SCj1[나는]8{\displaystyle SC_{j}[나는]\l ⋘ − ← SCj1[나는]− N_{s}}, j{j\displaystyle}-th 상수 SCj)(SCj[0],…, SCj[7]){\displaystyle{\textsf{SC}}_ᆵ=(SC_{j}[0],\ldots,SC_{j}[7])}SCj[나는]에 의해 만들어진다. 8 < .

초기 8단어 어레이 상수
9171990년 97884283c938982a
6c1b10a2 ba1fca93533e2355
6f352943 c519a2e87aeb1c03
cf778243 9a0fc95462af17b1
2ceb7472 fc3dda8ab019a82b
29e96ff2 02825d079a895407
8a9ba428 79f2d0a7ee06a6f7
2eeb2642 d76d15eed9fdf5fe

Word-Permutation 함수 WordPerm

=( [ ,… ,[ ) 을(를) 16자 배열로 한다. Word-permution 함수 : W 화살표 는 다음과 같이 정의된다.

여기서 (는) 다음 표로 정의된 16에 대한 순열이다.

순열 : Z 화살표
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
6 4 5 7 12 15 14 13 2 0 1 3 8 11 10 9

최종화

함수 : W { 0 {\ {\{\fIN returns -bit hash value from the final chaining variable . When is an 8-word variable and is a -byte variable, the finalization function 은(는) 다음 절차를 수행한다.

Here, denotes , the sub-bit string of a word for . And denotes , the sub-bit string of a -bit string for .

보안

LSH는 현재까지 알려진 해시함수 공격으로부터 안전하다. LSH는 이상적인 암호 모델에서 < / 2 충돌 방지 및 pre-image 을 가지고 있으며 LSH 구조에 대한 여러 질의 사항이다.[1] 스텝 수가 13개 이상일 때 기존의 모든 해시함수 공격에 대해 LSH-256이, 스텝 수가 14개 이상일 경우 LSH-512가 보안된다. 보안 마진으로 작동하는 단계는 압축 함수의 50%에 해당한다는 점에 유의하십시오.[1]

퍼포먼스

LSH는 다양한 소프트웨어 플랫폼에서 SHA-2/3을 능가한다. 다음 표는 여러 플랫폼에서 LSH의 1MB 메시지 해싱의 속도 성능을 보여준다.

1MB 메시지 해싱 속도 LSH(주기/바이트)[1]
플랫폼 P1[a] P2[b] P3[c] P4[d] P5[e] P6[f] P7[g] P8[h]
3.60 3.86 5.26 3.89 11.17 15.03 15.28 14.84
2.39 5.04 7.76 5.52 8.94 18.76 19.00 18.10
  1. ^ Intel Core i7-4770K @ 3.5GHz(하스웰), Ubuntu 12.04 64비트, GCC 4.8.1("-m64 -mavx2 -O3" 포함)
  2. ^ Intel Core i7-2600K @ 3.40GHz(샌디 브리지), Ubuntu 12.04 64비트, GCC 4.8.1("-m64 -mse4 -O3" 포함)
  3. ^ Intel Core 2 Quad Q9550 @ 2.83GHz(요크필드), Windows 7 32비트, Visual studio 2012
  4. ^ AMD FX-8350 @ 4GHz(Piledriver), Ubuntu 12.04 64비트, GCC 4.8.1("-m64 -mxop -O3" 포함)
  5. ^ 삼성 엑시노스 5250 ARM 코텍스-A15 @ 1.7GHz 듀얼 코어(Huins ACHRO 5250), Android 4.1.1
  6. ^ Qualcomm Snapdragon 800 Krait 400 @ 2.26GHz 쿼드 코어(LG G2), Android 4.4.2
  7. ^ 퀄컴 스냅드래곤 800 Krait 400 @ 2.3GHz 쿼드 코어(Samsung Galaxy S4), Android 4.2.2
  8. ^ 퀄컴 스냅드래곤 400 Krait 300 @ 1.7GHz 듀얼 코어(삼성 갤럭시 S4 미니), 안드로이드 4.2.2

다음 표는 Haswell을 기반으로 한 플랫폼에서 비교한 것이며, LSH는 Intel Core i7-4770k @ 3.5GHz 쿼드 코어 플랫폼에서, 다른 표는 Intel Core i5-4570S @ 2.9GHz 쿼드 코어 플랫폼에서 측정한다.

Haswell CPU(사이클/바이트)[1] 기반 플랫폼에서 LSH, SHA-2 및 SHA-3 최종 결승전의 속도 벤치마크
알고리즘. 메시지 크기(바이트)
장기의 4,096 1,536 576 64 8
LSH-256-256 3.60 3.71 3.90 4.08 8.19 65.37
스키인-512-256 5.01 5.58 5.86 6.49 13.12 104.50
블레이크-256 6.61 7.63 7.87 9.05 16.58 72.50
그뢰스틀-256 9.48 10.68 12.18 13.71 37.94 227.50
케차크-256 10.56 10.52 9.90 11.99 23.38 187.50
SHA-256 10.82 11.91 12.26 13.51 24.88 106.62
JH-256 14.70 15.50 15.94 17.06 31.94 257.00
LSH-512-512 2.39 2.54 2.79 3.31 10.81 85.62
스키인-512-512 4.67 5.51 5.80 6.44 13.59 108.25
블레이크-512 4.96 6.17 6.82 7.38 14.81 116.50
SHA-512 7.65 8.24 8.69 9.03 17.22 138.25
그뢰스틀-512 12.78 15.44 17.30 17.99 51.72 417.38
JH-512 14.25 15.66 16.14 17.34 32.69 261.00
케차크-512 16.36 17.86 18.46 20.35 21.56 171.88

다음 표는 Samsung Exynos 5250 ARM Cortex-A15 @ 1.7GHz 듀얼 코어 플랫폼에서 측정한다.

Exynos 5250 ARM Cortex-A15 CPU(사이클/바이트)[1] 기반 플랫폼에서 LSH, SHA-2 및 SHA-3 최종 결승전의 속도 벤치마크
알고리즘. 메시지 크기(바이트)
장기의 4,096 1,536 576 64 8
LSH-256-256 11.17 11.53 12.16 12.63 22.42 192.68
스키인-512-256 15.64 16.72 18.33 22.68 75.75 609.25
블레이크-256 17.94 19.11 20.88 25.44 83.94 542.38
SHA-256 19.91 21.14 23.03 28.13 90.89 578.50
JH-256 34.66 36.06 38.10 43.51 113.92 924.12
케차크-256 36.03 38.01 40.54 48.13 125.00 1000.62
그뢰스틀-256 40.70 42.76 46.03 54.94 167.52 1020.62
LSH-512-512 8.94 9.56 10.55 12.28 38.82 307.98
블레이크-512 13.46 14.82 16.88 20.98 77.53 623.62
스키인-512-512 15.61 16.73 18.35 22.56 75.59 612.88
JH-512 34.88 36.26 38.36 44.01 116.41 939.38
SHA-512 44.13 46.41 49.97 54.55 135.59 1088.38
케차크-512 63.31 64.59 67.85 77.21 121.28 968.00
그뢰스틀-512 131.35 138.49 150.15 166.54 446.53 3518.00

테스트 벡터

각 다이제스트 길이에 대한 LSH에 대한 테스트 벡터는 다음과 같다. 모든 값은 16진법 형태로 표현된다.

LSH-256-224("abc") = F7 C5 3B A4 03 4E 70 8E 74 FB A4 2E 55 99 7C A5 12 6B B7 62 36 88 F8 53 42 F7 37 32

LSH-256-256("abc") = 5F BF 36 5D AE A5 44 6A 70 53 C5 2B 57 40 4D 77 A0 7A 5F 48 A1 F7 96 3A 08 98 BA 1B 71 4741

LSH-512-224("abc") = D1 68 32 34 51 3E C5 69 83 94 57 1E AD 12 8A 8C 37 3E 97 1B 97 1B A2 0D CF 89 E4 89

LSH-512-256("abc") = CD 89 23 10 53 26 02 33 2B 61 3F C1 1A 69 62 FC A6 1E 9E CF FC D4 BC F7 58 58 D8 ED EC

LSH-512-384("abc") = 5F 34 4E FA A0 E4 3C CD 2E 5E 19 4D 60 39 79 4B 4F B4 31 F1 0F B4 B6 5F D4 5E 9D A4 EC DE 0F 27 B6 6E 8D BD FA 47 25 2E 0D 0B 74 1B FD 91 F9 FE

LSH-512-512("abc") = A3 D9 3C FE 60 DC 1A AC DD 3B D4 BE F0 A6 98 53 81 A3 96 C7 D4 9D 9F D1 77 79 56 97 C3 53 52 08 B5 C5 72 24 BE F2 10 84 D4 20 83 E9 5A 4B D8 EB 33 E8 69 81 2B 65 03 1C 42 88 19 A1 E7 CE 59 6D

구현

LSH는 공공 또는 민간, 상업 또는 비상업적 용도로 무료로 사용할 수 있다. C, Java, Python에서 구현된 LSH 배포 소스 코드는 KISA의 암호화 사용 활성화 웹페이지에서 다운로드할 수 있다.[2]

KCMVP

LSH는 한국암호화모듈검증프로그램(KCMVP)이 승인한 암호 알고리즘 중 하나이다.[3]

표준화

LSH는 다음 표준에 포함되어 있다.

  • KS X 3262, 해시함수 LSH(한국어)[4]

참조

  1. ^ a b c d e f Kim, Dong-Chan; Hong, Deukjo; Lee, Jung-Keun; Kim, Woo-Hwan; Kwon, Daesung (2015). LSH: A New Fast Secure Hash Function Family. Springer International Publishing. pp. 286–313. ISBN 978-3-319-15943-0.
  2. ^ "KISA 암호이용활성화 - 암호알고리즘 소스코드". seed.kisa.or.kr.
  3. ^ "KISA 암호이용활성화 - 개요". seed.kisa.or.kr.
  4. ^ "Korean Standards & Certifications (in Korean)".