Linux/서버 보안(CentOS)

파일암호화[비대칭키]

D4tai1 2018. 11. 11.

1. 비대칭키를 이용한 파일암호화

1) 비대칭키

 [1] 암호화 키와 복호화 키가 다른 것을 의미한다.

 [2] 수신자의 공개키로 암호화 후 수신자의 개인키로 복호화를 한다.

 [3] 기타 공개키관련 내용은 Cryptology로 분류된 글에서 확인이 가능하다.


2) gpg란?

 [1] gpg는 GNU Privacy Guard의 약자이다.

 [2] 공개키 암호를 사용하여 파일을 암호화하거나 전자서명 할 수 있도록 도와주는 오픈소스 소프트웨어이다.



2) 명령어

 [1] 공개키와 개인키 쌍 제작

   ▶ [gpg --gen-key] 명령어를 사용하여 암호화시 사용하는 공개키와 복호화시 사용하는 개인키 쌍을 제작한다.

   ▶ --gen-key는 옵션generate-key의 약자로 보여진다.

   ▶ 추가옵션은 -h옵션으로 확인이 가능하다.


 [2] 비대칭키로 복호화

   ▶ gpg [파일명.gpg] 방식으로 사용한다.


 [3] 해시값 확인

   ▶  gpg --fingerprint 명령어로 16진수로 된 지문을 확인할 수 있다.


 [4] 공개키 배포

   ▶ gpg -o [배포할 파일명] -a --export [배포할 공개키 식별자] 명령어로 공개키를 배포할 수 있다.

   ▶ -o옵션은 파일명을 설정하기 위해 사용한다.

   ▶ -a옵션은 Ascii의 약자로 Ascii형태로 배포한다는 말이다.

   ▶ --export옵션은 배포할 공개키 식별자를 적어주기위해 사용한다.


 [5] 받은 공개키 저장

   ▶ gpg --import [받은 공개키파일] 명령어로 받은 공개키를 데이터베이스에 저장한다.


 [6] 받은 공개키로 암호화

   ▶ gpg -aer [사용할 공개키의 식별자] [암호화할 파일] 명령어로 파일을 암호화한다.

   ▶ -a 옵션은 아스키코드형식으로 내보내는 것을 의미한다.

   ▶ -e 옵션은 encrypt의 약자로 데이터를 암호화하는 것을 의미한다.

   ▶ -r 옵션은 키를 지정하는 것을 의미한다.



3) 시연

 ※ 시나리오

 - root가 test1에게 계좌 비밀번호를 전송하려고 한다. (시나리오가 조금 이상하지만.. 이해를 돕기 위해)

만약 비밀키(대칭키)를 사용한다면 키를 전달하는데 유출될 가능성이 있다.

그래서 공개키 방식을 사용하여 계좌비밀번호를 전송하려고 한다.

수신할 test1이 키 쌍을 제작하고, 자신의 공개키를 root에게 배포한다.

root는 중간자공격을 당하지 않기 위해 test1의 공개키가 정말 맞는지 확인한다.

이후 root는 test1의 공개키로 계좌비밀번호 내용을 암호화하고 test1에게 전송한다.

test1은 자신의 개인키로 풀어서 root가 보낸 내용을 확인할 수 있다.


 [1] 공개키를 만들 계정 생성

   ▶ 공개키 쌍을 생성할 계정을 하나 생성한다.


 [2] 공개키와 개인키 쌍 제작

   ▶ 새로운 계정으로 접속 후 [gpg --gen-key] 명령어로 키 쌍을 제작한다.

   ▶ 사용하는 공개키암호 방식은 선택을 하면 되지만 기본설정(RSA)인 1번으로 시도하였다.


 [2] 키 길이지정

   ▶ 기본이 2048비트이다.

   ▶ 원하다면 키의 길이를 변경해도 무관하다.

   ▶ 이후 키의 유효기간을 설정하는데 기본이 0으로 설정되어 있다.

   ▶ 유효기간은 원하는대로 설정해도 되지만 유효기간 없이 제작해 보려고 한다.


 [3] 설정

   ▶ 공개키는 누구의 것이라고 설정을 해주어야 한다.

   ▶ 공개키의 주인과 주소, 설명을 작성하고 바꾸지 않으려면 O를 누른다.

   ▶ 메일은 실제 메일이 아닌 아무거나 적어도 무관하다.

   ▶ 그러나 메일주소로 공개키를 식별한다는 사실은 알고 있어야 한다.

   ▶ 현재 설정한 내용은 d4tai1이 d4tai1@test.com으로 공개키와 개인키를 생성한다는 내용이다.


 [4] 암호입력 및 재입력

   ▶ 이 암호는 암호화 된 파일을 복호화하는데 사용한다.


 [5] 난수생성 후 제작된 키 확인


   ▶ 여기까지와서 기다리기만 하면 자고일어나도 키생성이 불가능하다.

   ▶ 난수 생성을 하기 위해 아무키나 눌러준다.


   ▶ [alt+F?]키로 F1, F2..등 사용하지 않는 화면을 올려서 입력해도 가능하다.


   ▶ 키 쌍이 정상적으로 잘 만들어 졌다.


 [6] 생성된 공개키의 해시값을 확인

   ▶ 필요 시에 공개키의 해시값을 확인하여 d4tai1의 공개키가 맞는지 확인할 수 있다.


 [7] 공개키 배포

   ▶ 먼저 [ls] 명령어로 아무 것도 없는 것을 확인한다.

   ▶ [gpg -o test_public_key.pub -a --export d4tai1@test.com] 명령어로 공개키를 출력한다.

   ▶ -o 옵션은 출력할 파일명을 지정하며 테스트의 공개키라는 의미로 test_public_key.pub로 지정하였다.

   ▶ -a 옵션은 아스키형태로 출력하라는 의미이다.

   ▶ --export 옵션은 배포할 공개키의 식별자를 적어주면 된다.

   ▶ 처음에 키 쌍 생성 시에 메일이 키의 식별자라고 설명하였다.

   ▶ 이후 [ls] 명령어로 test_public_key.pub가 생성된 것을 확인한다.


 [8] 공개키 내용확인

   ▶ [vi test_public_key.pub] 명령어로 배포할 공개키를 확인한다.


   ▶ ...음 잘 만들어 진 것으로 보인다.


 [9] 받은 공개키 등록

   ▶ [gpg --import test_public_key.pub] 명령어를 사용해서 공개키 test_public_key.pub를 GPG데이터베이스에 추가한다.


 [10] 수신자(test1)의 공개키가 정확한지 확인

   ▶ 수신자의 공개키가 맞는지 확인한다.

   ▶ 추가적으로 [gpg --sign-key d4tai1@test.com] 명령어를 이용하여 서명할 수 있다.


 [11] 보낼 내용생성

   ▶ 전송할 내용을 작성한다

   ▶ [gpg -aer d4tai1@test.com important.txt] 명령어를 사용하여 test1의 공개키로 important.txt를 암호화한다.

   ▶ -a 옵션은 아스키코드형식으로 내보내는 것을 의미한다.

   ▶ -e 옵션은 encrypt의 약자로 데이터를 암호화하는 것을 의미한다.

   ▶ -r 옵션은 키를 지정하는 것을 의미한다.


 [12] 수신자의 공개키로 암호화

   ▶ 사용자가 정말로 무엇을 하고 있는지 알고 있다면 y를 누르면 된다는데..

   ▶ 수신자의 공개키로 파일을 암호화하는 것을 알고 있기에 y를 누른다.


 [13] 기존의 평문 삭제 후 복호화

   ▶ 암호화 된 파일은 확장자가 [원래파일명.asc]로 나온다.

   ▶ 이제 암호화 했으므로 기존의 평문은 삭제한다.

   ▶ [gpg important.txt.asc] 명령어로 복호화를 시도해본다.

   ▶ 당연히 secret key가 아니기 때문에 되지 복호화 할 수 없다고 나온다.

   ▶ 결국 이 암호화 파일은 test1이 가지고 있는 개인키로만 복호화가 가능하다.


 [14] 암호화파일을 test1계정에게 전송

   ▶ 간편하게 진행하기 위해 내부에서 진행하였지만 필요하다면 전송은 외부 메신저 및 메일을 이용해도 무방하다.


 [15] 복호화 시도

   ▶ [gpg important.txt.asc] 명령어로 암호화된 파일을 복호화한다.


 [16] 암호 입력

   ▶ A309E43E공개키로 암호화된 것을 FF25DAE8개인키로 풀기 위해 키 쌍을 생성할 때 설정한 암호를 입력한다.


 [17] 복호화 완료

   ▶ 복호화가 정상적으로 되어 내용을 확인할 수 있다.


 [18] 수신자의 개인키 위치

   ▶ 수신자의 홈 디렉터리의 [.gnupg/]내에 키 쌍정보 및 구조 정보가 있다.



※ 이전 게시물에서는 파일 암호화 중 대칭키를 다루었고

현재 게시물에서는 파일 암호화의 비대칭키인 공개키암호화 방식을 확인했다.

다음 게시물에서는 파일이 아닌 디스크 전체 암호화를 진행할 계획이다.



'Linux > 서버 보안(CentOS)' 카테고리의 다른 글

디스크 암호화  (0) 2018.11.12
디스크 관리  (0) 2018.11.11
파일암호화[대칭키]  (0) 2018.11.11
접근제어[사용자]  (0) 2018.11.11
접근권한[퍼미션]  (0) 2018.10.27

댓글