Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

대칭키와 비대칭키 #27

Open
Brandnew-one opened this issue May 6, 2023 · 0 comments
Open

대칭키와 비대칭키 #27

Brandnew-one opened this issue May 6, 2023 · 0 comments
Assignees
Labels

Comments

@Brandnew-one
Copy link
Owner

대칭키 암호화

Untitled

암호화와 복호화에 같은 같은 키를 사용하는 알고리즘을 의미한다.

즉, 클라이언트에서 대칭키 알고리즘을 통해서 Request Body를 암호화 시켜서 보내게 되는 경우 서버에서 해당 내용을 복호화 하기 위해서는 클라이언트에서 암호화하는데 사용했던 키를 서버에도 보내줘야 한다

그럼 머리속에서 이런 의문이 자연스럽게 떠오를 수 있다.

  • 클라이언트에서 그럼 서버로 대칭키는 어떻게 보내줘야 하는 걸까?
  • 보안을 위해서 Request Body를 암호화 했는데 복호화를 위한 키를 아무런 보안 없이 보내면 암호화는 의미가 없어질 수 있지 않을까?

실제로 대칭키를 암호화를 사용할 때, 대칭키를 안전하게 전달하는 것이 가장 중요한 부분이다.

실제 보안에 대해 조예가 깊지 않아 대칭키를 어떻게 안전하게 전달하지에 대한 다양한 방법에 대해서는 알지 못하지만 암호화-복호화할 내용을 대칭키 암호화를 이용하고 대칭키 암호화를 다시 비대칭키 암호화를 통해서 서버에 보내는 방식을 사용했다.

이러한 보안상 단점에도 대칭키 암호화를 사용하는 이유는 비대칭키 암호화에 비해 연산 속도가 빠르다

대표적인 대칭키 알고리즘으로는

  • DES
  • AES
  • SEED

등등이 있고 AES 알고리즘 구현에 대해 정리해볼 예정이다.


비대칭키 암호화(공개키)

Untitled 1

비대칭키 암호화는 암호화와 복호화에 서로 다른 키를 사용하는 알고리즘을 의미한다

위의 그림을 예시로 들면

  • 서버에서 암호화 복호화를 위한 Key Pair를 생성한다.
  • 개인키는 서버에 저장되고 클라이언트에 공개키를 제공한다
  • 클라이언트에서 공개키를 통해 Request Body를 암호화 한다
  • 서버는 암호화된 데이터를 개인키를 통해서 복호화한다

공개키를 통해 암호화된 데이터는 개인키를 통해서만 복호화 할 수 있기 때문에 위와 같은 과정이 가능하다

그럼 개인키를 통해서 암호화하고 공개키를 통해서 복호화를 할 수는 없을까? 라는 의문이 들 수 있다.

공개키는 누구나 얻을 수 있기 때문에 누구나 암호화 된 데이터를 복호화 할 수 있개 때문에 보안적인 측면에서는 권장되지 않지만 암호화 된 데이터를 복호화 했을 때 이전 데이터와 같은지만 확인하면 되는 디지털 서명에서 사용된다.

  • A는 개인키로 서명하려는 메시지를 암호화하고 원본과 서명 데이터를 보낸다
  • B는 공개키를 통해서 해당 메시지를 복호화 한다
  • 복호화한 데이터와 원본 데이터가 일치하는지 확인한다

B입장에서 공개키를 통해서 복호화가 성공적으로 이루어지면 A가 해당 내용을 보냈음이 보장되고 복호화 한 데이터와 원본이 같으면 데이터에 위조가 없음이 보장된다.

앞서 살펴본 대칭키에 비해 보안적으로 장점이 있지만 연산량이 많아 느리다는 단점이 있다.

대표적인 알고리즘으로

  • RSA
  • DSA, ECDSA

등등이 있고 RSA 알고리즘을 통한 암호화-복호화 과정, ECDSA를 통한 서명, 서명검증 과정을 구현해볼 예정이다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant