"SHA224"의 두 판 사이의 차이
(→특징) |
|||
(사용자 4명의 중간 판 46개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''SHA-224'''란 국가안보국(NSA)이 설계한 [[암호]] [[해시함수]]이다. | + | '''SHA-224'''<!--sha224, sha-224, SHA224, SHA-224 샤224, 샤-224, Secure Hash Algorithm 224, SecureHashAlgorithm224-->란 국가안보국(NSA)이 설계한 [[암호]] [[해시함수]]이다. |
== 개요 == | == 개요 == | ||
− | SHA-224는 2004년 2월 | + | SHA-224는 2004년 2월 업데이트된 [[SHA-2]]의 다른 버전이며, [[SHA-256]]으로 계산하다 마지막에 출력을 224비트로 줄이는 [[알고리즘]]이다. 또한 224비트 (28 바이트) 해시값을 생성하며 일반적으로 56자리 길이의 16진수로 [[렌더링]] 된다.<ref>MOBILEFISH, 〈[https://www.mobilefish.com/services/hash_generator/hash_generator.php MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator]〉, 《MOBILEFISH》</ref><ref name="솔라나라">윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04</ref>SHA-224를 포함한 SHA-256, SHA-384, SHA-512를 통합하여 SHA-2라고 하기도 한다.<ref>〈[https://ko.wikipedia.org/wiki/SHA SHA]〉, 《위키백과》</ref> |
== 특징 == | == 특징 == | ||
− | SHA-224는 SHA- | + | SHA-224는 [[SHA-256]]을 두 가지 방법으로 수정하여 정의되었는데, 256비트에서 32비트를 뺀 224비트로 줄여, 유효 보안 수준이 2의 224제곱을 갖고 있어 충돌 발견에 드는 예상 비용을 줄였고, 다른 초기화 값. 즉, SHA-224가 [[SHA-256]]에 대한 정보를 노출하지 않도록 한다(또는 그 반대도 마찬가지). 하지만 상위 버전인 SHA-256이 있어서 자주 쓰이는 편은 아니나 해시가 많은 경우와 타원 곡선 그룹에 매핑 할 때는 유용하게 쓰일 수 있다.<ref name="SHA-224">Ilmari Karonen, 〈[https://crypto.stackexchange.com/questions/15151/sha-224-purpose SHA-224 Purpose]〉, 《Cryptography》, 2014-03-21</ref> |
− | + | * 특성 | |
− | + | : {| class="wikitable" width=400 style="color:balck; text-align: center; background-color:#F8F9FA;" | |
− | + | ! 해시값의 크기 | |
− | + | | 224 | |
− | + | |- | |
− | + | ! 내부 상태 크기 | |
− | + | | 256 | |
− | + | |- | |
− | + | ! 블록크기 | |
− | + | | 512 | |
+ | |- | ||
+ | ! 길이 한계 | ||
+ | | 64 | ||
+ | |- | ||
+ | ! 워드 크기 | ||
+ | | 32 | ||
+ | |- | ||
+ | ! 과정 수 | ||
+ | | 64 | ||
+ | |- | ||
+ | ! 사용되는 연산 | ||
+ | | +, and, or, xor, shr, rotr | ||
+ | |- | ||
+ | ! 충돌 여부 | ||
+ | | 발견되지 않음 | ||
+ | |- | ||
+ | |}<ref name="솔라나라"></ref> | ||
− | + | * 차이점 | |
− | + | # 초기 해시값 h0 ~ h7은 서로 다르다. | |
− | + | # 출력은 h7을 생략하고 출력한다.<ref>〈[https://en.wikipedia.org/wiki/SHA-2 SHA-2]〉, 《Wikipedia》</ref> | |
− | + | * 단점 | |
− | [[SHA-256]]보다 효율이 떨어진다. 128비트 이상 256비트 이하의 [[해시]]를 원하는 경우, [[SHA-256]]을 사용하여 원하는 비트 길이로 출력하는 것이 [[SHA-224]]를 사용하는 것만큼 간단하고 효율적이기 때문이다.<ref name="SHA-224"></ref> | + | : [[SHA-256]]보다 효율이 떨어진다. 128비트 이상 256비트 이하의 [[해시]]를 원하는 경우, [[SHA-256]]을 사용하여 원하는 비트 길이로 출력하는 것이 [[SHA-224]]를 사용하는 것만큼 간단하고 효율적이기 때문이다.<ref name="SHA-224"></ref> |
+ | |||
+ | ==예제== | ||
+ | 제시한 문자열의 해시를 계산 | ||
+ | => SELECT SHA224('abc'); | ||
+ | SHA224 | ||
+ | ---------------------------------------------------------- | ||
+ | 78d8045d684abd2eece923758f3cd781489df3a48e1278982466017f | ||
+ | (1 row) | ||
+ | |||
+ | => SELECT SHA224('Vertica'::bytea); | ||
+ | SHA224 | ||
+ | ---------------------------------------------------------- | ||
+ | 135ac268f64ff3124aeeebc3cc0af0a29fd600a3be8e29ed97e45e25 | ||
+ | (1 row) | ||
+ | |||
+ | => SELECT sha224(''::varbinary) = 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f' AS "TRUE"; | ||
+ | TRUE | ||
+ | ------ | ||
+ | t | ||
+ | (1 row) | ||
+ | <ref>Vertica 공식 홈페이지 - http://a.to/19btcEw</ref> | ||
+ | |||
+ | * 자바(JAVA) | ||
+ | ''<font color=green>// Java program to calculate SHA-224 hash value </font>'' | ||
+ | |||
+ | <font color=#006699>import</font> java.math.BigInteger; | ||
+ | <font color=#006699>import</font> java.security.MessageDigest; | ||
+ | <font color=#006699>import</font> java.security.NoSuchAlgorithmException; | ||
+ | |||
+ | <font color=#006699>public class</font> GFG { | ||
+ | <font color=#006699>public static</font> String encryptThisString(String input) | ||
+ | { | ||
+ | <font color=#006699>try</font> { | ||
+ | ''<font color=green>// getInstance() method is called with algorithm SHA-224 </font>'' | ||
+ | MessageDigest md = MessageDigest.getInstance(<font color=blue>"SHA-224"</font>); | ||
+ | |||
+ | ''<font color=green>// digest() method is called </font>'' | ||
+ | ''<font color=green>// to calculate message digest of the input string </font>'' | ||
+ | ''<font color=green>// returned as array of byte </font>'' | ||
+ | <font color=#006699>byte</font>[] messageDigest = md.digest(input.getBytes()); | ||
+ | |||
+ | ''<font color=green>// Convert byte array into signum representation </font>'' | ||
+ | BigInteger no = <font color=#006699>new</font> BigInteger(1, messageDigest); | ||
+ | |||
+ | ''<font color=green>// Convert message digest into hex value </font>'' | ||
+ | String hashtext = no.toString(16); | ||
+ | |||
+ | ''<font color=green>// Add preceding 0s to make it 32 bit </font>'' | ||
+ | <font color=#006699>while</font> (hashtext.length() < 32) { | ||
+ | hashtext = <font color=blue>"0"</font> + hashtext; | ||
+ | } | ||
+ | |||
+ | ''<font color=green>// return the HashText </font>'' | ||
+ | return hashtext; | ||
+ | } | ||
+ | |||
+ | ''<font color=green>// For specifying wrong message digest algorithms </font>'' | ||
+ | <font color=#006699>catch</font> (NoSuchAlgorithmException e) { | ||
+ | <font color=#006699>throw new</font> RuntimeException(e); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ''<font color=green> // Driver code </font>'' | ||
+ | public static void main(String args[]) throws | ||
+ | NoSuchAlgorithmException | ||
+ | { | ||
+ | System.out.println("HashCode Generated by SHA-224 for: "); | ||
+ | |||
+ | String s1 = "GeeksForGeeks"; | ||
+ | System.out.println("\n" + s1 + " : " + encryptThisString(s1)); | ||
+ | |||
+ | String s2 = "hello world"; | ||
+ | System.out.println("\n" + s2 + " : " + encryptThisString(s2)); | ||
+ | } | ||
+ | } | ||
+ | <ref>GeeksforGeeks 공식 홈페이지 - https://www.geeksforgeeks.org/sha-224-hash-in-java/</ref> | ||
+ | |||
+ | * 파이썬(Python) | ||
+ | : SHA-224 해시값을 구하는 코드 | ||
+ | <font color=#FF1493>import</font> hashlib | ||
+ | |||
+ | string <font color=#FF1493>=</font> <font color=#006699>raw_input</font>() | ||
+ | sha <font color=#FF1493>=</font> hashlib.new(<font color=#ff6600>'sha224'</font>) | ||
+ | |||
+ | sha.update(string) | ||
+ | <font color=#006699>print</font> sha.hexdigest() | ||
+ | <ref>Crocus, 〈[https://www.crocus.co.kr/990 파이썬 sha, md5 해시값 구하는 방법]〉, 《티스토리》, 2017-08-24</ref> | ||
{{각주}} | {{각주}} | ||
== 참고자료 == | == 참고자료 == | ||
− | *〈[https://en.wikipedia.org/wiki/SHA-2 SHA]〉, | + | * 〈[https://en.wikipedia.org/wiki/SHA-2 SHA-2]〉, 《Wikipedia》 |
− | *MOBILEFISH, 〈[https://www.mobilefish.com/services/hash_generator/hash_generator.php MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator]〉, 《MOBILEFISH》 | + | * MOBILEFISH, 〈[https://www.mobilefish.com/services/hash_generator/hash_generator.php MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator]〉, 《MOBILEFISH》 |
− | *윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04 | + | * 윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04 |
− | *Ilmari Karonen, 〈[https://crypto.stackexchange.com/questions/15151/sha-224-purpose SHA-224 Purpose]〉, 《Cryptography》, 2014-03-21 | + | * Ilmari Karonen, 〈[https://crypto.stackexchange.com/questions/15151/sha-224-purpose SHA-224 Purpose]〉, 《Cryptography》, 2014-03-21 |
− | + | * 〈[https://ko.wikipedia.org/wiki/SHA SHA]〉, 《위키백과》 | |
− | + | * Vertica 공식 홈페이지 - http://a.to/19btcEw | |
+ | * Crocus, 〈[https://www.crocus.co.kr/990 파이썬 sha, md5 해시값 구하는 방법]〉, 《티스토리》, 2017-08-24 | ||
+ | * GeeksforGeeks 공식 홈페이지 - https://www.geeksforgeeks.org/sha-224-hash-in-java/ | ||
+ | == 같이 보기 == | ||
+ | * [[SHA-1]] | ||
+ | * [[SHA-256]] | ||
+ | * [[SHA-384]] | ||
+ | * [[SHA-512]] | ||
+ | * [[SHA-512/224]] | ||
+ | * [[SHA-512/256]] | ||
+ | * [[SHA-2]] | ||
+ | * [[MD5]] | ||
+ | * [[MD2]] | ||
+ | * [[C]] | ||
+ | * [[자바]] | ||
+ | * [[파이썬]] | ||
− | {{알고리즘| | + | {{암호 알고리즘|토막글}} |
2019년 11월 16일 (토) 14:32 기준 최신판
SHA-224란 국가안보국(NSA)이 설계한 암호 해시함수이다.
개요[편집]
SHA-224는 2004년 2월 업데이트된 SHA-2의 다른 버전이며, SHA-256으로 계산하다 마지막에 출력을 224비트로 줄이는 알고리즘이다. 또한 224비트 (28 바이트) 해시값을 생성하며 일반적으로 56자리 길이의 16진수로 렌더링 된다.[1][2]SHA-224를 포함한 SHA-256, SHA-384, SHA-512를 통합하여 SHA-2라고 하기도 한다.[3]
특징[편집]
SHA-224는 SHA-256을 두 가지 방법으로 수정하여 정의되었는데, 256비트에서 32비트를 뺀 224비트로 줄여, 유효 보안 수준이 2의 224제곱을 갖고 있어 충돌 발견에 드는 예상 비용을 줄였고, 다른 초기화 값. 즉, SHA-224가 SHA-256에 대한 정보를 노출하지 않도록 한다(또는 그 반대도 마찬가지). 하지만 상위 버전인 SHA-256이 있어서 자주 쓰이는 편은 아니나 해시가 많은 경우와 타원 곡선 그룹에 매핑 할 때는 유용하게 쓰일 수 있다.[4]
- 특성
해시값의 크기 224 내부 상태 크기 256 블록크기 512 길이 한계 64 워드 크기 32 과정 수 64 사용되는 연산 +, and, or, xor, shr, rotr 충돌 여부 발견되지 않음
- 차이점
- 초기 해시값 h0 ~ h7은 서로 다르다.
- 출력은 h7을 생략하고 출력한다.[5]
- 단점
- SHA-256보다 효율이 떨어진다. 128비트 이상 256비트 이하의 해시를 원하는 경우, SHA-256을 사용하여 원하는 비트 길이로 출력하는 것이 SHA-224를 사용하는 것만큼 간단하고 효율적이기 때문이다.[4]
예제[편집]
제시한 문자열의 해시를 계산
=> SELECT SHA224('abc'); SHA224 ---------------------------------------------------------- 78d8045d684abd2eece923758f3cd781489df3a48e1278982466017f (1 row)
=> SELECT SHA224('Vertica'::bytea); SHA224 ---------------------------------------------------------- 135ac268f64ff3124aeeebc3cc0af0a29fd600a3be8e29ed97e45e25 (1 row)
=> SELECT sha224(''::varbinary) = 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f' AS "TRUE"; TRUE ------ t (1 row)
- 자바(JAVA)
// Java program to calculate SHA-224 hash value import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class GFG { public static String encryptThisString(String input) { try { // getInstance() method is called with algorithm SHA-224 MessageDigest md = MessageDigest.getInstance("SHA-224"); // digest() method is called // to calculate message digest of the input string // returned as array of byte byte[] messageDigest = md.digest(input.getBytes()); // Convert byte array into signum representation BigInteger no = new BigInteger(1, messageDigest); // Convert message digest into hex value String hashtext = no.toString(16); // Add preceding 0s to make it 32 bit while (hashtext.length() < 32) { hashtext = "0" + hashtext; } // return the HashText return hashtext; } // For specifying wrong message digest algorithms catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } // Driver code public static void main(String args[]) throws NoSuchAlgorithmException { System.out.println("HashCode Generated by SHA-224 for: "); String s1 = "GeeksForGeeks"; System.out.println("\n" + s1 + " : " + encryptThisString(s1)); String s2 = "hello world"; System.out.println("\n" + s2 + " : " + encryptThisString(s2)); } }
- 파이썬(Python)
- SHA-224 해시값을 구하는 코드
import hashlib string = raw_input() sha = hashlib.new('sha224') sha.update(string) print sha.hexdigest()
각주[편집]
- ↑ MOBILEFISH, 〈MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, 《MOBILEFISH》
- ↑ 2.0 2.1 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04
- ↑ 〈SHA〉, 《위키백과》
- ↑ 4.0 4.1 Ilmari Karonen, 〈SHA-224 Purpose〉, 《Cryptography》, 2014-03-21
- ↑ 〈SHA-2〉, 《Wikipedia》
- ↑ Vertica 공식 홈페이지 - http://a.to/19btcEw
- ↑ GeeksforGeeks 공식 홈페이지 - https://www.geeksforgeeks.org/sha-224-hash-in-java/
- ↑ Crocus, 〈파이썬 sha, md5 해시값 구하는 방법〉, 《티스토리》, 2017-08-24
참고자료[편집]
- 〈SHA-2〉, 《Wikipedia》
- MOBILEFISH, 〈MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, 《MOBILEFISH》
- 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04
- Ilmari Karonen, 〈SHA-224 Purpose〉, 《Cryptography》, 2014-03-21
- 〈SHA〉, 《위키백과》
- Vertica 공식 홈페이지 - http://a.to/19btcEw
- Crocus, 〈파이썬 sha, md5 해시값 구하는 방법〉, 《티스토리》, 2017-08-24
- GeeksforGeeks 공식 홈페이지 - https://www.geeksforgeeks.org/sha-224-hash-in-java/
같이 보기[편집]