레이블이 security인 게시물을 표시합니다. 모든 게시물 표시
레이블이 security인 게시물을 표시합니다. 모든 게시물 표시

2018년 4월 19일 목요일

[links] PBKDF2, RSA-OAEP

PBKDF2

: https://en.wikipedia.org/wiki/PBKDF2

In cryptography, PBKDF1 and PBKDF2 (Password-Based Key Derivation Function 2) are key derivation functions with a sliding computational cost, aimed to reduce the vulnerability of encrypted keys to brute force attacks.

PBKDF2 applies a pseudorandom function, such as hash-based message authentication code (HMAC), to the input password or passphrase along with a salt value and repeats the process many times to produce a derived key, which can then be used as a cryptographic key in subsequent operations. The added computational work makes password cracking much more difficult, and is known as key stretching.


한글 설명과 그림으로 잘 설명하고 있는 글
: http://d2.naver.com/helloworld/318732

가장 많이 사용되는 key derivation function은 PBKDF2(Password-Based Key Derivation Function)이다. 해시 함수의 컨테이너인 PBKDF2는 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다. PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.


출처 : 네이버 d2 게시물(링크참조)

PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
PRF: 난수(예: HMAC)
 : https://en.wikipedia.org/wiki/HMAC

Password: 패스워드
Salt: 암호학 솔트
c: 원하는 iteration 반복 수
DLen: 원하는 다이제스트 길이

위 네이버 d2 게시물(링크참조)


RSA-OAEP

https://en.wikipedia.org/wiki/Optimal_asymmetric_encryption_padding

In cryptography, Optimal Asymmetric Encryption Padding (OAEP) is a padding scheme often used together with RSA encryption. OAEP was introduced by Bellare and Rogaway, and subsequently standardized in PKCS#1 v2 and RFC 2437.

OAEP satisfies the following two goals:


  • Add an element of randomness which can be used to convert a deterministic encryption scheme (e.g., traditional RSA) into a probabilistic scheme.
  • Prevent partial decryption of ciphertexts (or other information leakage) by ensuring that an adversary cannot recover any portion of the plaintext without being able to invert the trapdoor one-way permutation.



: https://seed.kisa.or.kr/iwt/ko/intro/EgovPublicKey.do

RSA(Rivest, Shamir and Adleman)
RSA[25]는 공개키 암호 시스템으로 암호화와 인증에 사용된다. RSA는 일반 정수론적인 면에서 정의되었다. 이 시스템은 큰 수의 인수분해의 어려움에 안전성을 두고 있다. 전자 서명의 길이는 RSA 시스템에서의 키 길이와 같다. RSA 시스템을 깨는 문제가 인수분해 문제로 귀결된다는 완전한 수학적 증명의 부족과 인수분해 문제가 NP-hard임에도 불구하고, RSA는 수많은 국제기구의 표준일 뿐만 아니라 산업 표준으로 권장되고 있다.

ElGamal
이산 대수 문제의 어려움에 기반을 둔 최초의 공개키 암호 알고리즘인 ElGamal[26]은 1984년 스탠퍼드 대학의 암호 학자 T. ElGamal에 의해 제안되었다. ElGamal으로 암호화하면 메시지의 길이가 두 배로 늘어나는 특징이 있다. 하지만 암호화할 때 난수를 이용하므로 같은 메시지에 대해 암호화하여도 암호화할 때마다 서로 다른 암호문을 얻게 되는데, 이것은 정보보호 측면에서 큰 장점이 된다. RSA에서는 난수를 사용하지 않기 때문에 같은 메시지에 대한 암호문은 항상 같다는 특징이 있는데, 이것은 공격자가 암호문을 복호화하지 않고도 평문을 추측할 수 있는 단점이 된다. 그러므로 실제 적용 시 RSA는 난수를 사용하는 OAEP(Optimal Asymmetric Encryption Padding)이라는 난수화 패딩 알고리즘과 함께 사용된다.

2014년 7월 26일 토요일

공개키 암호 방식, SSL/TLS, Open SSL

[고대? 암호화 방식들]

http://en.wikipedia.org/wiki/Scytale
http://en.wikipedia.org/wiki/Caesar_cipher





[공개키 암호 방식 설명 link 모음]
http://charlie0301.blogspot.kr/2014/07/link-public-key-infrastructure.html

: 디지털 서명 & 메시지 암호화
http://technet.microsoft.com/ko-kr/library/aa998077

* 공개키, 개인키 암호화 방식을 통해 메세지가 송신자에게서 전달된 것임을 확인하는 디지털 서명과 메세지를 암호화, 복호화 하기 위해 서로간 세션키를 전달하는 것이 기본 내용.

* 공개키 암호화/복호화 시 계산의 복잡성으로 다소 큰 비용이 발생하여
   임시 세션키를 사용하여 메세지를 암호화 하고 세션키를 공개키로 암호화 하여 비용 절감.



[X.509]
http://en.wikipedia.org/wiki/X.509
Public Key Infrastructure (PKI)와 Privilege Management Infrastructure (PMI)의 ITU의 표준으로 public key certificates에 대해서도 언급하고 있음.

* 즉 인증서는 공개키와 키의 정보를 함께 포함하고 있음.

$ openssl x509 -in freesoft-certificate.pem -noout -text
Certificate:
   Data:
       Version: 1 (0x0)
       Serial Number: 7829 (0x1e95)
       Signature Algorithm: md5WithRSAEncryption
       Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
               OU=Certification Services Division,
               CN=Thawte Server CA/emailAddress=server-certs@thawte.com
       Validity   
           Not Before: Jul  9 16:04:02 1998 GMT
           Not After : Jul  9 16:04:02 1999 GMT
       Subject: C=US, ST=Maryland, L=Pasadena, O=Brent Baccala,
                OU=FreeSoft, CN=www.freesoft.org/emailAddress=baccala@freesoft.org
       Subject Public Key Info:
           Public Key Algorithm: rsaEncryption
           RSA Public Key: (1024 bit)
               Modulus (1024 bit):
                   00:b4:31:98:0a:c4:bc:62:c1:88:aa:dc:b0:c8:bb:
                   33:35:19:d5:0c:64:b9:3d:41:b2:96:fc:f3:31:e1:
                   66:36:d0:8e:56:12:44:ba:75:eb:e8:1c:9c:5b:66:
                   70:33:52:14:c9:ec:4f:91:51:70:39:de:53:85:17:
                   16:94:6e:ee:f4:d5:6f:d5:ca:b3:47:5e:1b:0c:7b:
                   c5:cc:2b:6b:c1:90:c3:16:31:0d:bf:7a:c7:47:77:
                   8f:a0:21:c7:4c:d0:16:65:00:c1:0f:d7:b8:80:e3:
                   d2:75:6b:c1:ea:9e:5c:5c:ea:7d:c1:a1:10:bc:b8:
                   e8:35:1c:9e:27:52:7e:41:8f
               Exponent: 65537 (0x10001)
   Signature Algorithm: md5WithRSAEncryption
       93:5f:8f:5f:c5:af:bf:0a:ab:a5:6d:fb:24:5f:b6:59:5d:9d:
       92:2e:4a:1b:8b:ac:7d:99:17:5d:cd:19:f6:ad:ef:63:2f:92:
       ab:2f:4b:cf:0a:13:90:ee:2c:0e:43:03:be:f6:ea:8e:9c:67:
       d0:a2:40:03:f7:ef:6a:15:09:79:a9:46:ed:b7:16:1b:41:72:
       0d:19:aa:ad:dd:9a:df:ab:97:50:65:f5:5e:85:a6:ef:19:d1:
       5a:de:9d:ea:63:cd:cb:cc:6d:5d:01:85:b5:6d:c8:f3:d9:f7:
       8f:0e:fc:ba:1f:34:e9:96:6e:6c:cf:f2:ef:9b:bf:de:b5:22:
       68:9f

http://technet.microsoft.com/en-us/library/cc737264(v=ws.10).aspx





[Secure Scokets Layer(SSL)/Transport Layer Security(TLS)]

http://en.wikipedia.org/wiki/Transport_Layer_Security
http://ko.wikipedia.org/wiki/%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%ED%8A%B8_%EB%A0%88%EC%9D%B4%EC%96%B4_%EB%B3%B4%EC%95%88

인터넷 상에서 server, client간 communication 보안을 위해 설계된 protocol으로
암호화된 연결 및 데이터 무결성을 확보해 줌.

SSL specification은 1994, 1995, 1996년에 Nescape Communications에 의해 개발되었고 TLS는 IETF(Internet Engineering Task Force)에 의해 SSL을 기반하여 정의 됨.

: Authentication flow
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0CD8QFjAD&url=http%3A%2F%2Fmarcof.tistory.com%2Fattachment%2Fcfile25.uf%40144CA5344DDE672A3331AD.ppt&ei=Bq_DU6HINcLClAW6hoGoDg&usg=AFQjCNFQ3mOybIaplRiShYaYpWdqogYg-A&sig2=Ghmtl1v8oEE-rEk8hlrZkw&bvm=bv.70810081,d.dGI


- 앞장 1,2번을 통해 server, client 서로 random data를 주고 받음
- 서버는 4번을 통해 자신이 가지고 있는 인증서를 전달(CA의 개인키로 암호화 된)
 : client는 일반적으로 CA의 공개키를 가지고 있다.
- Client는 Server, client random data를 사용하여 Master Secret을 생성
- 생성된 Master Secret를 서버 공개키를 사용하여 암호화 후 전달(8번)
- Server, Client는 Master Secret를 사용하여 임시키(Session Key)를 생성함.
- 이후 Server, Client는 Session Key를 사용하여 - 데이터를 암호화/복호화 함. (대칭키 암호화 방식)

* client는 일반적인 서버를 인증하는 CA의 공개키(public key)를 가지고 있고, 서버는 CA로 부터 CA의 개인키(private key)로 암호화된 서버의 인증서를 가지고 있음.
 => 즉 client는 가지고 있는 CA의 공개키로 서버로 부터 받은 인증서를 복호화 하여 서버를 검증 함.

* server, client는 random data를 서로 공유하고 server, client에서 사용할 임시키(Session key)를 만들기 위한 Master Secret를  client에서 생성하여 전달함.
 : random data기반하여 clent가 master secret를 생성하는 공식은 다른 자료 참고


[SSL 관련 참조 링크]

SSL과 인증서
http://opentutorials.org/course/228/4894

암호화 역사 (KISA)
http://seed.kisa.or.kr/iwt/ko/intro/EgovHistory.do



[OpenSSL]

OpenSSL (Wikipedia)
http://en.wikipedia.org/wiki/OpenSSL

OpenSSL 설치 및 사용
http://www.solanara.net/solanara/openssl

OpenSSL 인증서 생성
http://www.embedded101.com/Blogs/PaoloPatierno/tabid/106/entryid/366/MQTT-over-SSL-TLS-with-the-M2Mqtt-library-and-the-Mosquitto-broker.aspx
http://golmong.tistory.com/112


- SSL/TLS protocol을 open-source 기반으로 구현한 software library
- Eric Andrew Young, Tim Hudson이 만든 SSLeay library를 기반으로 1998년 시작되었음.
- License : Dual licensed (Apache License 1.0 + BSD License)

- 지원하는 알고리즘들
 . Ciphers
  > AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89[7]
 . Cryptographic hash functions
  > MD5, MD4, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94
 . Public-key cryptography
  > RSA, DSA, Diffie–Hellman key exchange, Elliptic curve, GOST R 34.10-2001

- 그외
. libReSSL : Heartbleed 이슈로 OpenBSD 쪽에서 OpenSsl 1.0.1g에서 fork 하여 개발, 불필요 부분 대거 삭제
. BoringSSL : 2014년 Google이 OpenSSL와 libReSSL 개발자와 협력하기 위해 OpenSSL을 fork함.

2014년 7월 5일 토요일

[link] 공개키 암호 방식 (Public Key Infrastructure) 설명 link들 모음

SSL/TLS 관련 내용을 찾아보다 공개키 암호 방식 관련 내용이 나와 찾아봄.
여러번 배워도 항상 이해하지 못하고 까먹었던 관계로 괜찮은 링크를 정리함.


[공개 키 암호 방식, wikipedia]

http://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%EB%B0%A9%EC%8B%9D

공개 키 암호 방식의 원리는 위 링크에서 다음과 같이 설명하고 있음.
초기 암호화 방식의 경우 소수를 골라 비밀 키(private key)를 만들고 비밀키의 곱을 공개 키(public key)를 사용함.  충분히 큰수의 소인수 분해를 하기에는 시간과 비용이 많이 소요 되므로 안정성이 완벽하지는 않지만 보장됨. 


공개 키 암호 방식은 출제자만이 알고 있는 특정한 종류의 정보(비밀 키) 없이는 매우 풀기 어려운 수학적 문제(공개 키)를 바탕으로 만들어진다. 키를 만드는 사람은 이 문제(공개 키)를 일반에 공개하고 특정한 정보(비밀 키)는 자신만이 알수 있도록 숨긴다. 그러면 어떤 사람이건 이 문제를 이용해 메시지를 암호화하면 키를 만든 사람만이 이 문제를 풀어 원래 메시지를 해독할 수 있다.
RSA 암호와 같은 초기 암호들은 두 개의 큰 소수를 곱한 숫자를 문제로 사용하였다. 사용자는 임의의 큰 소수를 두 개 골라 비밀 키로 삼고 그 곱한 값을 공개 키로 공개한다. 큰 수의 소인수분해는 대단히 풀기 어려운 문제에 속하기 때문에 다른 사람들은 비밀 키를 알 수 없을 것이라는 사실이 보장된다. 그러나 최근 이 분야의 연구가 크게 진전되어 RSA의 안전성을 보장하기 위해서는 수천비트 이상의 큰 소수를 키로 사용해야 한다.
또 다른 종류의 문제로는 a와 c가 알려진 상태에서 방정식 ab = c의 해 b를 구하는 문제가 있다. 실수나 복소수에 대해서는 로그 함수를 이용해 이 문제를 쉽게 풀 수 있다. 그러나 유한군에서는 이런 문제를 풀기가 어려운 것으로 알려져 있으며 이런 문제를 이산 로그 문제라 부른다. 타원곡선암호를 비롯한 여러 가지 공개 키 암호들이 이산 로그 문제를 바탕으로 만들어져 있다.


[RSA 원리에 대한 자세하고 친절한 수학적 설명]
http://www.parkjonghyuk.net/lecture/modernCrypto/lecturenote/chap05.pdf

위 링크의 PT에서는 RSA의 수학적 설명이 친절하게 조곤조곤 설명해 주고 있음. 중학교 때 배웠던 내용이 기억이 안날 경우 아래 슬라이드를 보면서 파악하면 좋을 듯


[공개 키 암호화 이해]
http://technet.microsoft.com/ko-kr/library/aa998077

동작 방식과 디지털서명, 메세지 암호화에 대해 그림과 상세한 설명을 제공하고 있음.시간을 두고 읽어보는게 좋겠다.
각 절차에 대한 설명과 과정에서 사용되는 방법에 대한 설명이 있음.
예를 들어 서명에서 해시를 사용하는 이유와 메세지 암호화 시 공개 키가 아닌 일회성 세션 키(대칭 키)를 사용하는 이유가 암호화/복호화시 비용 절감이라는 것들에 대해서도 자세히 설명해 주고 있음.

(그림)


[공개 키 기반 암호화와 공인인증관련 설명]
http://crazia.tistory.com/entry/PKI-PKI-%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EA%B0%84%EB%8B%A8-%EC%84%A4%EB%AA%85

공개 키 기반 설명과 실제 사용하고 있는 공인인증과 공개 키 기반 암호화의 매칭도 설명해주고 있음.