ECDSA(타원 곡선 전자 서명 알고리즘)
for 파이썬(python) library
참고 사이트 : python-ecdsa
라이브러리 주요 특징
보안문제로 해당 라이브러리는 타이밍 공격을 방지하지 않고 있으니 참고하시기바랍니다.
사용 예시
VerifingKey는 데이터 문자열, 서명 문자열을 전달해서 서명을 검증하는데 사용할 수 있습니다. 서명이 맞을시 True를 반환하게되고 서명이 틀릴시에는 BadSignatureError 예외를 던지게 됩니다.
이러한 사인키와 확인키는 NIST192p 라는 기본타원곡선과 관련이 있습니다. 타원 곡선이 더 길어질 수록 더 안전합니다. 하지만 그럴경우엔 키와 서명길이가 증가하게됩니다.
위에 있는 파이썬 코드는 ecdsa 라이브러리를 사용하는 간단한 방법입니다. 먼저 generate()로 사인키를 생성해준후 .get_verifying_key() 매서드로 확인키를 만들어주는 모습입니다. 그리고 message1이라는 문자열로 서명을 해준뒤 .verify()로 서명확인을 해주는 코드입니다.
간단하게 보자면 사인키로 암호화를 진행해주고 확인키로 다시 복호화를 해주어 메세지(서명)가 일치하는지 확인하는 작업이라고 보시면됩니다.
위 사진은 코드의 결과입니다. 메세지가 일치하지 않음으로 예외를 던진것을 확인할 수 있습니다.
위 코드는 좀더 큰 타원 곡선을 사용한 예제입니다. 나머지 코드는 같으나 NIST384p 타원을 사용해준건데 그렇기 때문에 키의 길이가 더 길어지게 됩니다.
키는 다른 형식으로 변환이 가능한데 위 예제는 string형으로 변환해주는 모습입니다. 주의점은 curve형식을 따로 지정해주었으면 from으로 다시 되돌릴 때에도 동일한 curve형식을 주어야한다는 것 입니다.
결과 화면입니다. 동일한 출력으로 형변환이 잘 될 수 있다는 것을 확인했습니다.
위 코드는 OpenSSL에서 호환되는 PEM파일을 생성하는 방법을 설명한 코드입니다. to_pem(), to_der()로 오픈ssl에서와 호환이 되도록 시리얼화 해줄 수 있습니다.
pem형식도 마찬가지로 다시 from으로 되돌려주면 원본키를 얻어올 수 있다는 것을 설명하는 예제입니다. 중요한 점은 같은 타원이름이 VerifyingKey.from_string() 에 전달되어야한다는 것이다.
다음은 하나의 마스터키를 사용해서 사용하는 방법입니다. 예를 들어서 3개의 키를 별도로 만들고 하나의 마스터암호만 저장하는 경우에 사용하게됩니다. ecdsa.util을 사용하게되며 from_secret_exponent로 변환해서 사용하면됩니다.
예시에 대한 내용을 간단하게 살펴보았고, 다음 글에서 실제 사용시 구현할 수 있는 코드를 확인해 보도록 하겠습니다.
digital_signature (2).zip소스파일(비번 덧글요청)
2018/06/04 - [Python] - python ECDSA library Examples of use
'algorithm' 카테고리의 다른 글
동적 계획법 : 보행자 천국 (카카오 코드 페스티벌 예선 2017 문제 풀이) (0) | 2018.07.31 |
---|---|
Flood fill 알고리즘 (카카오프렌즈 컬러링북 문제 풀이) (0) | 2018.07.30 |