검수요청.png검수요청.png

"RIPEMD-128"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(사용자 2명의 중간 판 27개는 보이지 않습니다)
1번째 줄: 1번째 줄:
== 등장배경 ==
+
'''RIPEMD-128'''은 임의의 길이의 입력 값을 128[[비트]]로 압축하는 [[암호화]] [[해시함수]]이다.
  
1996년, 기존의 RIPEMD에서 발견된 보안적 취약점에 대응해 벨기에의 루벤에 위치한 Katholieke UniversitLeuven의 COSIC연구 그룹의 Hans Dobbertin, Antoon Bosselaers, Bart Preenel이 만든 보안 강화 버전중 하나로, 기존의 RIPEMD의 대체품으로 도입되었다.
+
==개요==
 
+
RIPEMD-128의 개발은 유럽의 RIPE(RACE Integrity Primitives Evaluation) 프로젝트 주관 하에 [[MD4]]와 [[MD5]]의 취약점을 분석했던 연구 그룹이 주도하였다. 이때 128비트의 [[RIPEMD]]을 개발했다. 그러나 1996년 [[뢰벤카톨릭대학교]](Katholieke Universiteit Leuven) 코식(COSIC)연구 그룹의 [[한스 도버틴]](Hans Dobbertin)은 RIPEMD-128에 대한 해독 가능성을 지적했는데, 실제로 오리지널 [[RIPEMD]]의 드롭 인 대체품으로 의심스러운 보안이 존재한다는 것으로 판명되었다. RIPE 개발 그룹에서는 한스 도버틴을 직접 참여시켜 160비트 해시함수인 RIPEMD-160을 다시 개발했다. 이것이 바로 [[RIPEMD-160]]이다.
== 문제점 ==
 
 
 
오리지널 RIPEMD의 드롭 인 대체품으로 의심스러운 보안이 존재한다는 것으로 판명할 수 있다.
 
  
 
== 특징 ==
 
== 특징 ==
17번째 줄: 14번째 줄:
 
== 알고리즘 ==
 
== 알고리즘 ==
  
임의의 입력 메시지에 대해 해시 함수는 128비트 해시 값, 즉 메시지 요약을 생성한다. 이 알고리즘은 MD4 해싱 알고리즘을 기반으로 한다. MD4 해싱은 비선형 부울 함수의 사용을 포함하는 48개의 연산으로 구성되며, 각 연산은 3회 반복된다. RIPEMD-128의 알고리즘은 라운드 수를 4로 증가시킨다. 또한 다른 부울 함수와 상수 값이 사용된다. 알고리즘은 병렬로 두 줄(스트림)으로 실행되며, 일반적으로 왼쪽과 오른쪽으로 나뉜다. 알고리즘은 몇 가지 기본 단계로 구성된다.
+
임의의 입력 메시지에 대해 해시 함수는 128비트 해시 값, 즉 메시지 요약을 생성한다. 이 알고리즘은 [[MD4]] 해싱 알고리즘을 기반으로 한다. MD4 해싱은 비선형 부울 함수의 사용을 포함하는 48개의 연산으로 구성되며, 각 연산은 3회 반복된다. RIPEMD-128의 알고리즘은 라운드 수를 4로 증가시킨다. 또한 다른 부울 함수와 상수 값이 사용된다. 알고리즘은 병렬로 두 줄(스트림)으로 실행되며, 일반적으로 왼쪽과 오른쪽으로 나뉜다. 알고리즘은 몇 가지 기본 단계로 구성된다.
 
 
=== 1. 누락 된 비트 추가 ===
 
  
 +
===누락 된 비트 추가===
 
알고리즘은 512 비트 길이의 데이터 블록으로 작동하며 입력 메시지는 필요한 크기로 미리 전달된다. 우선, 메시지의 초기 길이에 관계없이, 1비트가 추가되고, 수신 된 시퀀스의 길이가 모듈로 512가 되는 448비트가 될 때까지 비트0이 추가된다. 512비트까지 확장하면  수정 된 메시지의 길이는 64비트가 된다. 이 단계에서 1~512비트가 추가 될 수 있다.
 
알고리즘은 512 비트 길이의 데이터 블록으로 작동하며 입력 메시지는 필요한 크기로 미리 전달된다. 우선, 메시지의 초기 길이에 관계없이, 1비트가 추가되고, 수신 된 시퀀스의 길이가 모듈로 512가 되는 448비트가 될 때까지 비트0이 추가된다. 512비트까지 확장하면  수정 된 메시지의 길이는 64비트가 된다. 이 단계에서 1~512비트가 추가 될 수 있다.
  
=== 2. 메시지 길이 추가하기 ===
+
===메시지 길이 추가하기===
 
 
 
다음 단계에서는 원래 메시지의 길이가 64 비트 표현으로 (첫 번째 단계를 적용하기 전에) 448 비트의 수신 메시지에 추가된다.  초기 메시지의 길이가  2⁶⁴비트를 초과하는 경우, 하위 64비트만이 비트 길이로 사용된다. 또한 원본 메시지의 길이는 두 개의 32비트 단어 형식으로 추가된다. 먼저 낮은 32비트가 추가 된 다음 높은 비트가 추가된다. 이 단계가 끝나면 수정 된 메시지의 길이는 512비트가 된다. 16비트, 32비트 워드 형식으로도 표현 할 수가 있다.
 
다음 단계에서는 원래 메시지의 길이가 64 비트 표현으로 (첫 번째 단계를 적용하기 전에) 448 비트의 수신 메시지에 추가된다.  초기 메시지의 길이가  2⁶⁴비트를 초과하는 경우, 하위 64비트만이 비트 길이로 사용된다. 또한 원본 메시지의 길이는 두 개의 32비트 단어 형식으로 추가된다. 먼저 낮은 32비트가 추가 된 다음 높은 비트가 추가된다. 이 단계가 끝나면 수정 된 메시지의 길이는 512비트가 된다. 16비트, 32비트 워드 형식으로도 표현 할 수가 있다.
  
=== 3. 함수및 상수 정의 ===
+
===함수및 상수 정의===
 
+
==== 메시지의 단어 순서 ====
==== a. 메시지의 단어 순서 ====
 
  
 
메시지에서 32비트 워드의 순서를 결정하기 위해 각 라운드에서 다양한 순열 함수 조합이 사용된다.
 
메시지에서 32비트 워드의 순서를 결정하기 위해 각 라운드에서 다양한 순열 함수 조합이 사용된다.
  
: 함수 정의 ρ:
+
:순열 함수 정의 <math>\rho</math>:
  
 
:{|class=wikitable width=600
 
:{|class=wikitable width=600
!align=center|i
+
!i
!align=center|0
+
|0
!align=center|1
+
|1
!align=center|2
+
|2
!align=center|3
+
|3
!align=center|4
+
|4
!align=center|5
+
|5
!align=center|6
+
|6
!align=center|7
+
|7
!align=center|8
+
|8
!align=center|9
+
|9
!align=center|10
+
|10
!align=center|11
+
|11
!align=center|12
+
|12
!align=center|13
+
|13
!align=center|14
+
|14
!align=center|15
+
|15
 
|-
 
|-
!align=center|ρ(i)
+
!<math>\rho(i)</math>
!align=center|7
+
|7
!align=center|14
+
|14
!align=center|13
+
|13
!align=center|1
+
|1
!align=center|10
+
|10
!align=center|6
+
|6
!align=center|15
+
|15
!align=center|3
+
|3
!align=center|12
+
|12
!align=center|0
+
|0
!align=center|9
+
|9
!align=center|5
+
|5
!align=center|2
+
|2
!align=center|14
+
|14
!align=center|11
+
|11
!align=center|8
+
|8
 
|-
 
|-
 
|}
 
|}
  
:함수 정의 : π
+
:순열 함수 정의 : <math>\pi</math>
  
π(i) = 9i + 5(mod16)
+
<math>\pi(i) = 9i + 5(mod16)</math>
  
 
각 라운드에서 순서는 다음과 같이 결정된다.
 
각 라운드에서 순서는 다음과 같이 결정된다.
87번째 줄: 81번째 줄:
 
!align=center|라운드 4
 
!align=center|라운드 4
 
|-
 
|-
!align=center|왼쪽
+
!왼쪽
!align=center|i
+
|<math>i</math>
!align=center|ρ
+
|<math>\rho</math>
!align=center|<math>\rho^2</math>
+
|<math>\rho^2</math>
!align=center|<math>\rho^3</math>
+
|<math>\rho^3</math>
 
|-
 
|-
 
!오른쪽
 
!오른쪽
100번째 줄: 94번째 줄:
 
|}
 
|}
  
{{알고리즘|토막글}}
+
==== 부울 함수 ====
 +
각 라운드에서 특정 부울 함수가 각 행에 적용된다.
 +
 
 +
비선형 비트 단위 부울 함수 정의 :
 +
 
 +
<math>{\displaystyle f_{1}(x,y,z)=x\oplus y\oplus z}</math><br>
 +
<math>{\displaystyle f_{2}(x,y,z)=(x\land y)\lor (\neg x\land z)}</math><br>
 +
<math>{\displaystyle f_{3}(x,y,z)=(x\lor \neg y)\oplus z}</math><br>
 +
<math>{\displaystyle f_{4}(x,y,z)=(x\land z)\lor (y\land \neg z)}</math>
 +
 
 +
각 라운드에서, 라인에 따라 적용된다 :
 +
 
 +
:{|class=wikitable width=600
 +
!align=center|선
 +
!align=center|라운드 1
 +
!align=center|라운드 2
 +
!align=center|라운드 3
 +
!align=center|라운드 4
 +
|-
 +
!왼쪽
 +
|<math>{\displaystyle f_{1}}</math>
 +
|<math>{\displaystyle f_{2}}</math>
 +
|<math>{\displaystyle f_{3}}</math>
 +
|<math>{\displaystyle f_{4}}</math>
 +
|-
 +
!오른쪽
 +
|<math>{\displaystyle f_{4}}</math>
 +
|<math>{\displaystyle f_{3}}</math>
 +
|<math>{\displaystyle f_{2}}</math>
 +
|<math>{\displaystyle f_{1}}</math>
 +
|}
 +
 
 +
==== 상수 ====
 +
 
 +
알고리즘에 사용 된 상수(K)로 다음 실수의 전체 부분이 사용된다.
 +
 
 +
:{|class=wikitable width=600
 +
!align=center|선
 +
!align=center|라운드 1
 +
!align=center|라운드 2
 +
!align=center|라운드 3
 +
!align=center|라운드 4
 +
|-
 +
!왼쪽
 +
|<math>0</math>
 +
|<math>{\displaystyle 2^{30}{\sqrt {2}}}</math>
 +
|<math>{\displaystyle 2^{30}{\sqrt {3}}}</math>
 +
|<math>{\displaystyle 2^{30}{\sqrt {5}}}</math>
 +
|-
 +
!오른쪽
 +
|<math>{\displaystyle 2^{30}{\sqrt[{3}]{2}}}</math>
 +
|<math>{\displaystyle 2^{30}{\sqrt[{3}]{3}}}</math>
 +
|<math>{\displaystyle 2^{30}{\sqrt[{3}]{5}}}</math>
 +
|<math>0</math>
 +
|}
 +
 
 +
===해싱 실행 ===
 +
 
 +
모든 소스 함수 및 상수를 설정하고 메시지를 필요한 크기로 줄이면 알고리즘 샐행으로 진행할 수 있다. 이 알고리즘은 두 개의 병렬 경로(선)를 따라 실행된다. 메시지 처리는 32비트의 16단어로 이루어진다.
 +
 
 +
각 단계에서 다음 작업이 각 행에 대해 수행된다.
 +
 
 +
<math>{\displaystyle A:=(A+f(B,C,D)+X+K)^{<<s}}</math>
 +
 
 +
여기서는 위치의 순환 시프트를 나타낸다.<math>{\displaystyle ^{<<s}}</math><ref>위키피디아, [https://ru.wikipedia.org/wiki/RIPEMD-128#cite_note-Cryptanalysis_of_Full_RIPEMD-128-1 RIPEMD-128]</ref>
 +
 
 +
{{각주}}
 +
 
 +
== 참고 자료 ==
 +
 
 +
* 위키피디아 - https://ru.wikipedia.org/wiki/RIPEMD-128#cite_note-Cryptanalysis_of_Full_RIPEMD-128-1,
 +
 
 +
== 같이 보기 ==
 +
* [[RIPEMD]]
 +
 
 +
{{암호 알고리즘|검토 필요}}

2019년 7월 7일 (일) 03:41 기준 최신판

RIPEMD-128은 임의의 길이의 입력 값을 128비트로 압축하는 암호화 해시함수이다.

개요[편집]

RIPEMD-128의 개발은 유럽의 RIPE(RACE Integrity Primitives Evaluation) 프로젝트 주관 하에 MD4MD5의 취약점을 분석했던 연구 그룹이 주도하였다. 이때 128비트의 RIPEMD을 개발했다. 그러나 1996년 뢰벤카톨릭대학교(Katholieke Universiteit Leuven) 코식(COSIC)연구 그룹의 한스 도버틴(Hans Dobbertin)은 RIPEMD-128에 대한 해독 가능성을 지적했는데, 실제로 오리지널 RIPEMD의 드롭 인 대체품으로 의심스러운 보안이 존재한다는 것으로 판명되었다. RIPE 개발 그룹에서는 한스 도버틴을 직접 참여시켜 160비트 해시함수인 RIPEMD-160을 다시 개발했다. 이것이 바로 RIPEMD-160이다.

특징[편집]

  • 출력비트 수 : 128
  • 내부상태 크기 : 128
  • 블록 크기 : 512
  • 길이 크기 : 64
  • 문자열 크기 : 32

알고리즘[편집]

임의의 입력 메시지에 대해 해시 함수는 128비트 해시 값, 즉 메시지 요약을 생성한다. 이 알고리즘은 MD4 해싱 알고리즘을 기반으로 한다. MD4 해싱은 비선형 부울 함수의 사용을 포함하는 48개의 연산으로 구성되며, 각 연산은 3회 반복된다. RIPEMD-128의 알고리즘은 라운드 수를 4로 증가시킨다. 또한 다른 부울 함수와 상수 값이 사용된다. 알고리즘은 병렬로 두 줄(스트림)으로 실행되며, 일반적으로 왼쪽과 오른쪽으로 나뉜다. 알고리즘은 몇 가지 기본 단계로 구성된다.

누락 된 비트 추가[편집]

알고리즘은 512 비트 길이의 데이터 블록으로 작동하며 입력 메시지는 필요한 크기로 미리 전달된다. 우선, 메시지의 초기 길이에 관계없이, 1비트가 추가되고, 수신 된 시퀀스의 길이가 모듈로 512가 되는 448비트가 될 때까지 비트0이 추가된다. 512비트까지 확장하면 수정 된 메시지의 길이는 64비트가 된다. 이 단계에서 1~512비트가 추가 될 수 있다.

메시지 길이 추가하기[편집]

다음 단계에서는 원래 메시지의 길이가 64 비트 표현으로 (첫 번째 단계를 적용하기 전에) 448 비트의 수신 메시지에 추가된다. 초기 메시지의 길이가 2⁶⁴비트를 초과하는 경우, 하위 64비트만이 비트 길이로 사용된다. 또한 원본 메시지의 길이는 두 개의 32비트 단어 형식으로 추가된다. 먼저 낮은 32비트가 추가 된 다음 높은 비트가 추가된다. 이 단계가 끝나면 수정 된 메시지의 길이는 512비트가 된다. 16비트, 32비트 워드 형식으로도 표현 할 수가 있다.

함수및 상수 정의[편집]

메시지의 단어 순서[편집]

메시지에서 32비트 워드의 순서를 결정하기 위해 각 라운드에서 다양한 순열 함수 조합이 사용된다.

순열 함수 정의 :
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
7 14 13 1 10 6 15 3 12 0 9 5 2 14 11 8
순열 함수 정의 :

각 라운드에서 순서는 다음과 같이 결정된다.

라운드 1 라운드 2 라운드 3 라운드 4
왼쪽
오른쪽

부울 함수[편집]

각 라운드에서 특정 부울 함수가 각 행에 적용된다.

비선형 비트 단위 부울 함수 정의 :




각 라운드에서, 라인에 따라 적용된다 :

라운드 1 라운드 2 라운드 3 라운드 4
왼쪽
오른쪽

상수[편집]

알고리즘에 사용 된 상수(K)로 다음 실수의 전체 부분이 사용된다.

라운드 1 라운드 2 라운드 3 라운드 4
왼쪽
오른쪽

해싱 실행[편집]

모든 소스 함수 및 상수를 설정하고 메시지를 필요한 크기로 줄이면 알고리즘 샐행으로 진행할 수 있다. 이 알고리즘은 두 개의 병렬 경로(선)를 따라 실행된다. 메시지 처리는 32비트의 16단어로 이루어진다.

각 단계에서 다음 작업이 각 행에 대해 수행된다.

여기서는 위치의 순환 시프트를 나타낸다.[1]

각주[편집]

  1. 위키피디아, RIPEMD-128

참고 자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 RIPEMD-128 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.