티스토리 뷰

ECDSA(타원 곡선 전자 서명 알고리즘)
for 파이썬(python) library

 타원 곡선 알고리즘은 기존에 많이 사용되던 RSA알고리즘보다 작은용량을 가지면서도 더 빠른 수행능력을 가진 암호화기술입니다. 그 때문에 최근 차세대 암호화기술로 조명받고 있으며, 그 예시로는 비트코인에서도 타원곡선알고리즘(Elliptic Curve Cryptography)을 사용하고 있습니다. 보다 자세한 내용은 생략하고 본 글에서는 파이썬에 있는 ECDSA 라이브러리를 사용하는 방법을 알아보도록 하겠습니다.

 참고 사이트 : python-ecdsa

라이브러리 주요 특징

 해당 라이브러리(Pure-Python ECDSA)의 주요 특징은 키생성,인증생성 그리고 확인하는 방식을 제공합니다. 키 길이는 192, 224, 256, 384, 521bit 를 제공합니다. 물론 용량이 클 수록 높은 보안성을 가지게 됩니다.

속도

 보안문제로 해당 라이브러리는 타이밍 공격을 방지하지 않고 있으니 참고하시기바랍니다.

사용 예시

 SigningKey를 만듬으로써 진행하게됩니다. 이 사인키는 데이터를 서명하는데 사용하게 됩니다. 또한 사인키에 해당하는 VerifingKey를 쌍으로 만들게 되는데 이키는 서명을 확인(인증)하는데 사용하게 됩니다.

 VerifingKey는 데이터 문자열, 서명 문자열을 전달해서 서명을 검증하는데 사용할 수 있습니다. 서명이 맞을시 True를 반환하게되고 서명이 틀릴시에는 BadSignatureError 예외를 던지게 됩니다.

 이러한 사인키와 확인키는 NIST192p 라는 기본타원곡선과 관련이 있습니다. 타원 곡선이 더 길어질 수록 더 안전합니다. 하지만 그럴경우엔 키와 서명길이가 증가하게됩니다.

SigningKey

 위에 있는 파이썬 코드는 ecdsa 라이브러리를 사용하는 간단한 방법입니다. 먼저 generate()로 사인키를 생성해준후 .get_verifying_key() 매서드로 확인키를 만들어주는 모습입니다. 그리고 message1이라는 문자열로 서명을 해준뒤 .verify()로 서명확인을 해주는 코드입니다.

 간단하게 보자면 사인키로 암호화를 진행해주고 확인키로 다시 복호화를 해주어 메세지(서명)가 일치하는지 확인하는 작업이라고 보시면됩니다.

VerifingKey

 위 사진은 코드의 결과입니다. 메세지가 일치하지 않음으로 예외를 던진것을 확인할 수 있습니다.

메세지가 일치하지 않음

 위 코드는 좀더 큰 타원 곡선을 사용한 예제입니다. 나머지 코드는 같으나 NIST384p 타원을 사용해준건데 그렇기 때문에 키의 길이가 더 길어지게 됩니다.

NIST384p 타원

 키는 다른 형식으로 변환이 가능한데 위 예제는 string형으로 변환해주는 모습입니다. 주의점은 curve형식을 따로 지정해주었으면 from으로 다시 되돌릴 때에도 동일한 curve형식을 주어야한다는 것 입니다.

curve형식

 결과 화면입니다. 동일한 출력으로 형변환이 잘 될 수 있다는 것을 확인했습니다.

출력으로 형변환

위 코드는 OpenSSL에서 호환되는 PEM파일을 생성하는 방법을 설명한 코드입니다. to_pem(), to_der()로 오픈ssl에서와 호환이 되도록 시리얼화 해줄 수 있습니다.

 to_pem(), to_der()

pem형식도 마찬가지로 다시 from으로 되돌려주면 원본키를 얻어올 수 있다는 것을 설명하는 예제입니다. 중요한 점은 같은 타원이름이 VerifyingKey.from_string() 에 전달되어야한다는 것이다.

VerifyingKey.from_string()

 다음은 하나의 마스터키를 사용해서 사용하는 방법입니다. 예를 들어서 3개의 키를 별도로 만들고 하나의 마스터암호만 저장하는 경우에 사용하게됩니다. ecdsa.util을 사용하게되며 from_secret_exponent로 변환해서 사용하면됩니다.

 예시에 대한 내용을 간단하게 살펴보았고, 다음 글에서 실제 사용시 구현할 수 있는 코드를 확인해 보도록 하겠습니다.

digital_signature (2).zip소스파일(비번 덧글요청)

2018/06/04 - [Python] - python ECDSA library Examples of use

파이썬(Python) - 패키지(package), 예외처리(try, catch), 예외생성 등

파이썬(Python) - 클래스(Class), self, def, 생성자, 상속, 오버라이딩, 모듈

댓글
댓글쓰기 폼