>  기사  >  암호화의 강도는 주로 무엇에 따라 달라집니다.

암호화의 강도는 주로 무엇에 따라 달라집니다.

醉折花枝作酒筹
醉折花枝作酒筹원래의
2021-06-25 11:28:0120604검색

암호화의 강도는 주로 암호화 방법과 키 복잡성에 따라 달라집니다. 키는 암호알고리즘을 사용할 때 입력하는 매개변수로, 암호문이 안전한지 여부를 결정하는 중요한 매개변수이다. 일반적으로 키가 길수록 해독이 어렵다.

암호화의 강도는 주로 무엇에 따라 달라집니다.

이 튜토리얼의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터.

암호화의 강도는 주로 암호화 방법과 키 복잡성에 따라 달라집니다.

Key

키는 암호 알고리즘 사용 시 입력되는 매개변수입니다. 동일한 일반 텍스트는 동일한 암호화 알고리즘과 다른 키 계산에 따라 다른 암호문을 생성합니다. 잘 알려진 많은 암호화 알고리즘은 공개되어 있으며 키는 암호문이 안전한지 여부를 결정하는 중요한 매개변수입니다. 일반적으로 키가 길수록 해독이 더 어려워집니다. 잘 알려진 DES 알고리즘은 더 이상 안전한 암호화 알고리즘이 아닙니다. 56비트 키가 너무 짧기 때문입니다. 몇 시간 내에 깨집니다. 키는 대칭키와 비대칭키로 구분됩니다.

Plaintext/Ciphertext

Plaintext는 암호화 전의 원본 데이터이고, ciphertext는 암호문이 되기 위한 암호 연산 후 얻은 결과입니다.

Symmetric key

Symmetric key -key 알고리즘)을 공유키 암호화라고도 합니다. 암호화 및 암호 해독 프로세스에서 동일한 키를 사용합니다. 일반적인 대칭 암호화 알고리즘에는 DES, 3DES, AES, RC5 및 RC6이 포함됩니다. 대칭 키의 장점은 계산 속도가 빠르지만 단점도 있습니다. 통신의 양쪽 끝에서 키를 공유해야 상대방이 키를 해독할 수 있도록 서로 키가 무엇인지 알 수 있습니다. 모든 클라이언트가 동일한 키를 공유한다면 이 키는 하나의 키를 사용하여 모든 사람의 암호문을 해독할 수 있습니다. 각 클라이언트와 서버가 별도의 키를 유지한다면 서버는 수천 개의 키를 관리해야 합니다. . 이는 서버 측에 악몽을 초래할 수 있습니다.

다음은 일반 텍스트를 ASCII로 암호화하는 간단한 대칭 암호화입니다.

# 加密的方式:在ASCII的基础上 + 密钥的值
def encipher(plain_text, key):  
   # 加密
cipher_text = []
for c in plain_text:
cipher_text.append(str(ord(c) + key))
return ' '.join(cipher_text)
def decipher(cipher_text, key):
   # 解密    
plain_text = []
for c in cipher_text.split(" "):
plain_text.append(chr(int(c)+key))
return "".join(plain_text)if __name__ == '__main__':
print "cipher_text:", encipher("abcdef", 0)
print "plain_text:", decipher("97 98 99 100 101 102", 0)

비대칭 키

비대칭 키(공개 키 암호화)는 공개 키 암호화라고도 알려져 있으며, 서버는 한 쌍의 키를 생성합니다. 하나의 개인 키는 서버에 저장되며 다른 하나는 본인만 알고 있습니다. 누구나 자유롭게 사용할 수 있는 공개키입니다.

클라이언트의 일반 텍스트는 공개 키로 암호화되고 암호문은 개인 키로 해독되어야 합니다. 비대칭 키는 암호화와 복호화 과정에서 서로 다른 키를 사용합니다. 암호화와 복호화는 비대칭이므로 비대칭 암호화라고 합니다.

대칭 키 암호화와 비교하여 비대칭 암호화는 클라이언트와 서버 간에 키 공유가 필요하지 않습니다. 개인 키가 어떤 사용자에게도 전송되지 않는 한, 공개 키가 온라인에서 가로채더라도 해독할 수 없습니다. 도난당한 공개 키는 아무 소용이 없습니다. 일반적인 비대칭 암호화는 RSA입니다. 비대칭 암호화 및 복호화 프로세스:

  • 서버는 한 쌍의 공개 키와 개인 키를 생성합니다

  • 개인 키는 서버에 저장되고 공개 키는 클라이언트로 전송됩니다.

  • 클라이언트는 공개 키를 사용하여 일반 텍스트를 암호화하고 서버에 전송합니다. 서버는 개인 키를 사용하여 암호 텍스트를 해독하고 일반 텍스트를 획득합니다. 하도급을 받지 않고 실제 서버에서 데이터가 전송되는지 확인하고, 전송된 데이터가 변조되지 않았는지 확인하는 방법 이 두 가지 문제를 해결하려면 디지털 서명을 사용해야 합니다. . 계약서에 귀하의 이름이 기재되면 이는 귀하가 합법적으로 서명한 것입니다. 이는 귀하의 독점 필기체이므로 누구도 위조할 수 없습니다.

  • 그럼 컴퓨터의 디지털 서명은 어떻게 되나요? 디지털 서명은 전송된 내용이 실제 서버에서 보낸 데이터인지, 전송된 데이터가 변조되었는지 여부를 확인하는 데 사용되며 이 두 가지 작업을 수행하며 비대칭 암호화의 응용 시나리오입니다. 그러나 그는 대신 개인 키를 사용하여 일치하는 공개 키를 통해 이를 암호화하고 해독합니다.
  • 1단계: 서버는 해시를 통해 메시지를 처리하여 다이제스트 정보 다이제스트를 생성합니다. 다이제스트 정보는 개인 키를 사용하여 암호화되어 서명을 생성합니다.

  • 2단계: 클라이언트는 데이터를 받은 후 서명을 추출하고 공개 키를 사용하여 해독합니다. Digest2가 정상적으로 해독되면 상대방이 보낸 것임을 확인할 수 있습니다.

3단계: 클라이언트는 메시지의 텍스트를 추출하고 동일한 해시 처리를 수행합니다. 획득한 다이제스트 정보 Digest1을 이전에 복호화된 Digist2와 비교하여 둘이 동일하면 내용이 변조되지 않았음을 의미합니다. 그렇지 않으면 내용이 변경되었습니다. 텍스트 내용에 약간의 변화가 있는 한 완전히 다른 요약 정보가 해시되기 때문입니다.

디지털 인증서

CA라고도 하는 디지털 인증서는 권위 있는 기관에서 웹사이트에 발급하는 공인 인증서입니다. 이 인증서는 모든 사람(브라우저)이 인식할 수 있으므로 디지털 인증서를 사용해야 하는 이유는 무엇입니까? 디지털 서명?

브라우저가 모든 실제 서버가 실제로 진짜인지 확인할 수 없는 상황이 있습니다. 다음은 간단한 예입니다. 제조업체 A는 집에 자물쇠를 설치하고 동시에 열쇠를 제공합니다. 자물쇠를 열면 열쇠와 자물쇠가 일치하는지 확인할 수 있습니다. 누군가가 열쇠나 자물쇠를 변경했는데 문을 열 수 없다면 도난당한 것이 분명합니다. 다른 세트도 겉보기에는 비슷해 보이지만 품질이 훨씬 떨어집니다. 열쇠와 자물쇠가 일치한다고 해도 실제로 A업체에서 제공한 것인지 확실하지 않습니다. 이때 품질 검사 부서에 문의하면 됩니다. 확인해보세요. 이 자물쇠 세트는 정말 A 제조업체에서 나온 것인가요? 품질 검사 부서는 권위 있는 기관이고, 그가 말한 내용은 대중이 알아볼 수 있습니다(하하).

마찬가지로 누군가(Zhang San)가 실제 서버에서 브라우저로 보낸 공개 키를 자신의 공개 키로 대체하면 Zhang San은 자신의 개인 키를 사용하여 동일한 단계를 수행하여 텍스트를 해시하고 디지털 서명하고 마지막으로 얻은 결과에는 아무런 문제가 없지만 실제로 브라우저에 표시되는 내용은 실제 서버에서 제공한 것이 아니라 Zhang San이 내부에서 외부(공개 키에서 개인 키로) 변경한 것입니다.

그렇다면 지금 사용하고 있는 공개 키가 실제 서버에서 보낸 공개 키인지 어떻게 확인할 수 있을까요? 우리는 이 문제를 해결하기 위해 디지털 인증서를 사용합니다. 디지털 인증서는 일반적으로 디지털 인증 기관(인증 기관)에서 발급됩니다. 인증서에는 실제 서버의 공개 키와 웹 사이트에 대한 기타 정보가 포함되어 있습니다. 디지털 인증 기관은 이를 자체 개인 키로 암호화하여 브라우저에 보냅니다. 브라우저는 디지털 인증서를 사용합니다. 조직의 공개키를 복호화하여 실제 서버의 공개키를 얻습니다. 이 과정은 모두가 인정하는 인증기관으로부터 획득한 공개키를 기반으로 하기 때문에 안전한 방법이다.

더 많은 컴퓨터 관련 지식을 알고 싶으시면 FAQ 칼럼을 방문해주세요!

위 내용은 암호화의 강도는 주로 무엇에 따라 달라집니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.