+-+-+ +-+ +-+-+-+-+
|G|O| |4| |H|I|V|E|
+-+-+ +-+ +-+-+-+-+

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

인증서 파일 형식 및 확장자의 차이점 비교 설명

BY: @yjiq150 | CREATED: Oct. 20, 2018, 2:32 a.m. | VOTES: 9 | PAYOUT: $0.21 | [ VOTE ]

https를 지원하는 웹서버를 설정하거나 서명이나 암호화 관련된 개발을 하게되면 한번씩 인증서 관련된 파일을 다룰 일이 생기게 된다. 이때 항상 프로그램이나 라이브러리들이 지원하는 형식이 달라서 인증서 형식을 변환해아 하는데 현재 갖고있는 파일의 형식이 무엇인지를 알아야 제대로 활용이 가능하다. 인증서 파일의 경우 인코딩 방식과 확장자가 일치하는 경우도 있고, 그렇지 않은 경우도 있기 때문에 아래와 같이 비교해서 정리해 보았다.

표준 비교 PKCS#8, PKCS #12, X.509

암호화/복호화 PKCS#1Padding, PKCS#5Padding, PKCS#7Padding의 차이점

암호화 복호화 코드를 작성해본 사람이라면 분명히 Padding과 관련된 코드를 한번이라도 보았을 것이다. 이름이 전혀 직관적이지 않다보니 처음 접했을 때는 도데체 뭘 의미하는지 알기가 어려웠지만 하나씩 차근차근 알아보도록 하자.

PKCS5Padding, PKCS7Padding

대칭키 알고리즘(ex: AES)을 사용 할 때 암호화 하려는 데이터의 길이가 긴 경우 ECB (Electronic Codebook), CBC(Cipher Block Chain) 등의 block cipher 방식을를 사용해서 데이터를 암호화 하게된다. 블록단위로 잘라서 암호화/복호화가 진행되기 때문에 정해진 마지막 블록의 사이즈와 실제 데이터의 크기가 맞지 않는 경우가 생길 수 있다. 이때 마지막 블록의 빈 공간을 채워넣는(padding) 방식을 말한다.

예를 들어 데이터가 17바이트인데 block size가 8바이트라면 총 3개의 블록이 필요하고 마지막 블록은 7바이트가 남기때문에 이부분을 특정 값으로 채워넣어서 암호화를 진행한다.

PKCS5Padding과 PKCS7Padding 둘다 빈 공간에 값을 채워넣는 규칙은 다음과 같다.

대신 PKCS5Padding과 PKCS7Padding의 경우 block size의 제약 조건이 다르다.

PKCS1Padding

PKCS1Padding는 앞서말한 PKCS5Padding/PKCS7Padding과는 방식도 다르고 사용처도 다르다. PKCS1Padding는 보통 RSA 알고리즘과 같이 사용되며 PKCS#1 v1.5 에 명시된 padding 방법을 사용한다.

Crpyto Library in Java

Java에서 제공하는 Crypto 라이브러리의 경우 Cipher.getInstance("algorithm/mode/padding") 형식의 스트링으로 암호화 알고리즘, 모드, 패딩방식을 결정할 수 있다. 참고로 데이터의 길이가 길어서 (블럭의 갯수가 하나 이상)인 경우 ECB는 보안성이 취약하니 CBC를 꼭 사용해야 한다. (각 블럭의 데이터가 섞이지 않은 상태로 동일한 암호화를 적용하면 데이터에 패턴이 나타나게됨)

예시)

OpenSSL을 이용하여 인증서 조작하기

인증서의 정보를 보거나(View), 다른 포멧으로 변환(Transform), 합침(Combination) 등의 조작을 하기위해서 openSSL 명령어를 사용할 수 있다.

(openssl 명령어의 경우 inform 옵션이 따로 지정되지 않은경우 PEM형식으로 처리를 시도한다.)

부록: RSA 키 페어 생성 하기

외부 인증기관에서 인증서를 전달받지 않고, 내부적으로 사용할 RSA 키 페어가 필요하다면 아래 설명된 절차를 통해서 간단하게 키 페어를 만들어 낼 수 있다.

RSA key pair 생성

openssl genrsa -des3 -out private.pem 2048

private.pem파일을 열어보면 -----BEGIN RSA PRIVATE KEY----- 로 표시되는 것을 확인 할 수 있다.

Private key에 포함된 정보 확인

RSA private key로부터 public key를 만들어 낼 수 있다. 어떻게 그게 가능한지 보기 위해서 아래 명령어를 사용해보자.

openssl rsa -text -in private.pem

위 명령어로 출력된 결과에 public key를 정의하는데 필요한 modulus와 publicExponent정보가 포함되어있는것을 알 수있다. 실제로 private key로부터 public key를 추출하기 위해서 다음 단계를 살펴보자.

Private key에서 Public key추출하기

openssl rsa -in private.pem -outform PEM -pubout -out public.pem

public.pem 파일을 열어서 -----BEGIN PUBLIC KEY----- 로 표시되는것을 확인 하면 된다.

References

TAGS: [ #kr ] [ #kr-dev ] [ #crypto ] [ #certificate ]

Replies

@jyinvest | Oct. 20, 2018, 3:47 a.m. | Votes: 0 | [ VOTE ]

와우! 잘정리해주셨네요
배우고갑니다!

팔로우할게요~

@steemitboard | Oct. 21, 2018, 8:26 a.m. | Votes: 0 | [ VOTE ]

Congratulations @yjiq150! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

[IMAGE: https://steemitimages.com/70x80/http://steemitboard.com/notifications/votes.png] Award for the number of upvotes

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemitBoard Ranking update - Resteem and Resteemed added

> Support SteemitBoard's project! Vote for its witness and get one more award!

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>