의견.png

"SHA224"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (Asadal님이 SHA-224 문서를 SHA224 문서로 이동하면서 넘겨주기를 덮어썼습니다)
 
(사용자 4명의 중간 판 61개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''SHA-224'''란 국가안보국(NSA)이 설계한 [[암호]] [[해시함수]]이다.<ref name="SHA-2 위키피디아">〈[https://en.wikipedia.org/wiki/SHA-2 SHA]〉, 《위키피디아》</ref>
+
'''SHA-224'''<!--sha224, sha-224, SHA224, SHA-224 샤224, 샤-224, Secure Hash Algorithm 224, SecureHashAlgorithm224-->란 국가안보국(NSA)이 설계한 [[암호]] [[해시함수]]이다.
  
 
== 개요 ==
 
== 개요 ==
SHA-224는 224비트 (28 바이트) 해시 값을 생성하며 일반적으로 56자리 길이의 16진수로 렌더링된다.  
+
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-256을 두 가지 방법으로 수정하여 정의되었는데, 1. 256비트에서 32비트를 뺀 224비트로 줄여, 유효 보안 수준이 2의 224제곱을 갖고 있어 충돌 발견에 소요되는 예상 비용을 줄였고, 2. 다른 초기화 값. 즉, [[SHA-224]]가 [[SHA-256]]에 대한 정보를 노출하지 않도록 한다(또는 그 반대도 마찬가지). 하지만 상위 버전인 SHA-256이 있기 때문에 자주 쓰이는 편은 아니나 해시가 많은 경우와 타원 곡선 그룹에 매핑 할 때는 유용하게 쓰일 수 있다.<ref name="SHA-2 특징">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="SHA-224">Ilmari Karonen, 〈[https://crypto.stackexchange.com/questions/15151/sha-224-purpose sha-224]〉, 《Cryptography》, 2014-03-21</ref>
+
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>
  
== 차이점 ==
+
* 특성
* 초기 해시 값 h0 ~ h7은 서로 다르다.
+
: {| class="wikitable" width=400 style="color:balck; text-align: center; background-color:#F8F9FA;"
* 출력은 h7을 생략하고 출력한다.<ref name="SHA-2 위키피디아"></ref>
+
! 해시값의 크기
 +
| 224
 +
|-
 +
! 내부 상태 크기
 +
| 256
 +
|-
 +
! 블록크기
 +
| 512
 +
|-
 +
! 길이 한계
 +
| 64
 +
|-
 +
! 워드 크기
 +
| 32
 +
|-
 +
! 과정 수
 +
| 64
 +
|-
 +
! 사용되는 연산
 +
| +, and, or, xor, shr, rotr
 +
|-
 +
! 충돌 여부
 +
| 발견되지 않음
 +
|-
 +
|}<ref name="솔라나라"></ref>
  
== 문제점 ==
+
* 차이점
[[SHA-256]]보다 효율이 떨어진다. 128비트 이상 256비트 이하의 [[해시]]를 원하는 경우, [[SHA-256]]을 사용하여 원하는 비트 길이로 출력하는 것이 [[SHA-224]]를 사용하는 것만큼 간단하고 효율적이기 때문이다.<ref name="SHA-224"></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>
 +
 
 +
==예제==
 +
제시한 문자열의 해시를 계산
 +
=> 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-2]〉, 《Wikipedia》
 +
* 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
 +
* 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
충돌 여부 발견되지 않음
[2]
  • 차이점
  1. 초기 해시값 h0 ~ h7은 서로 다르다.
  2. 출력은 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)

[6]

  • 자바(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)); 
    }  
}

[7]

  • 파이썬(Python)
SHA-224 해시값을 구하는 코드
import hashlib
 
string = raw_input()
sha = hashlib.new('sha224')
 
sha.update(string)
print sha.hexdigest()

[8]

각주[편집]

  1. MOBILEFISH, 〈MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, 《MOBILEFISH》
  2. 2.0 2.1 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04
  3. SHA〉, 《위키백과》
  4. 4.0 4.1 Ilmari Karonen, 〈SHA-224 Purpose〉, 《Cryptography》, 2014-03-21
  5. SHA-2〉, 《Wikipedia》
  6. Vertica 공식 홈페이지 - http://a.to/19btcEw
  7. GeeksforGeeks 공식 홈페이지 - https://www.geeksforgeeks.org/sha-224-hash-in-java/
  8. Crocus, 〈파이썬 sha, md5 해시값 구하는 방법〉, 《티스토리》, 2017-08-24

참고자료[편집]

같이 보기[편집]


  의견.png 이 SHA224 문서는 암호 알고리즘에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.