lunchScreen/Interview_Questions

대칭키와 공개키에 대해 설명해주세요

Opened this issue · 6 comments

대칭키와 공개키에 대해 설명해주세요

대칭키는 데이터를 암호화하고 해독하는 키가 동일한 키로 속도가 빠르지만 대칭키의 유출 시 데이터가 공개된다는 문제와 키를 교환해야 한다는 문제가 있습니다.
대표적인 대칭키 알고리즘에는 DES(Data Encryption Standard), 3DES(Triple DES), RC2(Rivest Cipher 2), RC4(Rivest Cipher 4), AES(Advanced Encryption Standard), SEED가 있습니다.
이 중 DES, 3DES, RC2, AES, SEED는 정해진 블록 단위로 암호화 블록을 생성하는 블록 암호, RC4는 연속적인 비트/바이트를 계속해서 입력받아 암호화 비트/바이트를 생성하는 스트림 암호입니다.

공개키는 데이터를 암호화하고 해독하는 키가 서로 다른 키로 속도는 매우 느리지만, 비밀성, 인증, 무결성을 모두 얻을 수 있는 방식입니다.
대표적인 공개키 알고리즘에는 RSA(Rivest Shamir Adleman), DH(Diffie-Hallman), DSA(Digital Signature Algorithm)가 있습니다.

암호화 방식에는 대칭키를 사용하는 방법과 공개키, 개인키를 사용하는 방법이 있습니다. 대칭키는 두 대상이 암 복호화에 동일한 키를 사용하는 방식입니다. 공개키, 개인키는 모든 사람이 접근 가능한 공개키를 이용해 암호화하고, 각 사용자가 가지고 있는 개인키를 이용해 복호화 하는 방식입니다.

  • 부인 방지
    • 부인 방지는 개인키로 암호화하고, 공개키로 복호화가 가능한지 확인하는 방식이다.
    • A의 공개키로 복호화가 된다면, A의 개인키로 암호화가 되었다는 의미이기 때문에 송신자는 A일 수 밖에 없으므로 A가 보내었다는 것을 증명할 수 있음

대칭키는 암호화, 복호화 시 같은 암호 키를 사용하는 암호화 알고리즘입니다. 암호화 하는 단위에 따라 연속적인 비트/바이트를 계속해서 입력받는 대응하는 암호를 비트/바이트 단위로 생성하는 스트림 암호와 정해진 한 단위(블록)를 입력받고 대응하는 암호화 블록을 생성하는 블록 암호가 있습니다.

공개키는 암호화, 복호화 시 다른 암호 키를 사용하는 방식으로 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호라고 불리기도 합니다. 공개 키 암호 방식은 크게 공개 키 암호와 공개 키 서명으로 나눌 수 있습니다.

공개 키 암호 방식은 특정한 비밀 키를 가지고 있는 사용자만 내용을 열어볼 수 있는 것으로, 열쇠로 잠겨 있고 좁은 투입구가 있는 편지함으로 비유할 수 있습니다. 편지함의 위치(공개 키)만 알면 투입구를 통해 누구나 편지를 넣을 수 있고, 편지함 열쇠(개인 키)를 가진 사람만이 편지함을 열어 내용을 확인할 수 있는 것입니다.

공개 키 서명 방식은 특정한 비밀 키로 만들었다는 것을 누구나 확인할 수 있는 것으로, 인장으로 편지 봉투를 봉하는 것에 비유할 수 있습니다. 봉인한 편지는 누구나 열어볼 수 있고, 인장 확인을 통해 인장을 소유한 발신자가 이 편지를 보냈음을 증명할 수 있습니다.

공개 키 방식은 대칭 키 방식보다 계산이 복잡해 느리다는 단점이 있어 효율을 위해 대칭 키 방식과 함께 사용됩니다. 공개 키 암호 기술로는 짧은 비밀 키 만을 암호화하고, 전체 메시지는 대칭 키 방식을 사용하여 양쪽의 장점을 모두 취합니다.

대칭키

대칭키는 암복호화키가 동일하며 해당 키를 아는 사람만이 문서를 복화해 볼수 있게 된다. 대표적인 알고리즘으로는 DES, 3DES, AES, SEED,ARIA등이 있다

공개키 암호하 방식에 비해 속도가 빠르다는 장점이 있지만, 키를 교환해야 하는 문제가 발생한다. 키를 교환하는 중 키가 탈취될 수 있는 문제도 있고 사람이 증가할수록 전부 따로 키교환을 해야하기 때문에 관리해야 할 키가 방대하게 많아진다.

이러한 키 배송 문제를 해결하기 위한 방법으로 키의 사전 공유에 의한 해결, 키 배포센터에 의한 해결, Diffie-Hellman 키 교환에 의한 해결, 공개키 암호에 의한 해결이 있다.

공개키

대칭키의 키교환 문제를 해결하기 위해 등장한 것이 공개키(비대칭키) 암호화 방식이다. 이름 그대로 키가 공개되어 있기 때문에 키를 교환할 필요가 없어지며 공개키는 모든 사람이 접근 가능한 키이고 개인키는 각 사용자만이 가지고 있는 키이다.

A가 B에게 데이터를 보낸다고 할 때, A는 B의 공개키로 암호화한 데이터를 보내고 B는 본인의 개인키로 해당 암호화된 데이터를 복호화해서 보기 때문에 암호화된 데이터는 B의 공개키에 대응되는 개인키를 갖고 있는 B만이 볼 수 있게 된다.

따라서 공개키는 따로 키교환이나 분배를 할 필요가 없어지고 중간 공격자가 B의 공개키를 얻는다고 해도 B의 개인키로만 복호화가 가능하기 때문에 기밀성을 제공하며 개인키를 가지고 있는 수신자만이 암호화된 데이터를 복화할 수 있으므로 일종의 인증기능도 제공한다는 장점이 있지만, 속도가 느리다는 단점이 있다.

암호화에 사용되는 알고리즘은 크게 대칭키, 공개키 두 가지로 나눌 수 있습니다.

  • 먼저 대칭키 방식은 암호화와 복호화에 같은 키를 사용합니다. 속도가 빠르기 때문에 대용량 Data 암호에 적합합니다. 하지만 해당 Key를 전달하는 과정에서 해킹의 위험에 노출될 수 있으며, 사용하는 사용자가 늘어날수록 관리가 어려워집니다. 이에 해당하는 대표적인 알고리즘으로는 SEED, DES, 3 DES, AES, ARIA가 있습니다.

  • 공개키 방식은 암호화와 복호화에 사용되는 키가 다릅니다. 암호화에는 공개키를 사용하고 복호화에는 비공개키(암호키)를 사용합니다. 따라서 대중적으로 공개키를 공개해도 암호화만 가능할 뿐, 배공개키(암호키)를 보유하지 않았기 때문에 이에 대한 복호화는 불가능합니다. 키를 분배할 필요가 없어 보안에는 좋지만, 대칭키 암호화에 비해 속도가 느리다는 단점이 있습니다. 이에 해당하는 대표적인 알고리즘으로는 RSA, DSA, ECC가 있습니다.

  • cf. 반대로 비공개키를 통해 암호화를 진행하고 공개키로 복호화를 하도록 할 수도 있습니다. 이렇게 암호화된 정보는 공개키와 함께 전송됩니다. 공개키로 암호화된 정보를 복호화할 수 있습니다. 공개키가 유출될 위험이 있는데 왜 이런 방식을 사용할까요? 이는 데이터 보호가 목적이 아니기 때문입니다. 암호화된 데이터를 특정 공개키를 통해 복호화할 수 있다는 것은 그 데이터가 공개키와 쌍을 이루는 비공개키를 통해 암호화되었음을 인증하는 셈이 됩니다. 즉, 데이터를 제공한 쪽의 신원을 보장하는 것이 주 목적이라는 것입니다.

대칭키는 암호화와 복호화에 같은 키를 사용하는 알고리즘입니다. 대칭키를 사용한다면 동일한 키를 사용하기 때문에 매우 빠르다는 장점이 있지만 하나의 키로 암호화와 복호화를 진행하는 방식으로 송신측과 수신측 사이에서 대칭키가 이동해야하므로 제 3자에 의해 빼앗기게 될 위험이 있습니다.

이런 문제를 해결하기 위한 것이 공개키(비대칭키)로, 공개키는 평문을 암호화하는 공개키, 복호화하는 비밀키를 가지고 있어 다른 암호키를 사용해서 암호화와 복호화를 하는 알고리즘입니다. 암호키는 송수신과정에서 키가 이동되지 않기 때문에 안전하는 장점이 있지만 암호화와 복호화가 복잡하고 시간이 느리다는 단점이 있습니다.

< 비대칭키 구현하는 방법>
비대칭 키는 RSA 알고리즘은 사용합니다. 이는 키 생성, 암호화, 복호화과정으로 이루어져있습니다. 키를 생성할 때는 두 소수 p, q 를 준비하고 p와 q 의 곱인 N 을 계산합니다. 그리고 (p-1)(q-1) 보다 작고 서로소인 e 를 공개키로 설정하고 (p-1)(q-1) 로 나눴을 때 나머지가 1인 de 중에서 d 가 0과 N 사이에 있는 것을 찾으면 d 가 비밀키가 됩니다. 암호화과정은 평문을 e 제곱한 이후에서 N 으로 나눈 나머지가 암호문이 되고, 받은 암호문에 d 제곱을 하고 N 으로 나눈 나머지를 구하면 평문으로 복호화가 됩니다.

이는 N 과 e 가 공개되기 때문에 계산을 하면 개인키를 뽑아낼 수도 있어서 안전성을 보장하기 위해 1024 bit 길이의 키값을 사용하고 현재는 2048bit 를 권장하기도 합니다.