암호화 알고리즘 rsa 3072. 전자 디지털 서명, RSA 알고리즘

전자 전자 서명(EDS)는 데이터 소스를 인증하고 이 전자 문서를 위조로부터 보호하기 위한 전자 문서 필수 조건입니다.

일반 계획

전자 서명 체계에는 일반적으로 다음이 포함됩니다.

  • 사용자 키 쌍을 생성하기 위한 알고리즘;
  • 서명 계산 기능;
  • 서명 확인 기능.

문서와 사용자의 개인 키를 기반으로 서명을 계산하는 기능은 서명 자체를 계산합니다. 알고리즘에 따라 서명을 계산하는 함수는 결정적이거나 확률적일 수 있습니다. 결정적 함수는 항상 동일한 입력에서 동일한 서명을 계산합니다. 확률 함수는 서명에 무작위 요소를 도입하여 EDS 알고리즘의 암호화 강도를 향상시킵니다. 그러나 확률적 체계에는 신뢰할 수 있는 임의성 소스(하드웨어 노이즈 생성기 또는 암호학적으로 신뢰할 수 있는 의사 난수 비트 생성기)가 필요하므로 구현이 복잡합니다.

현재 결정적 체계는 실제로 사용되지 않습니다.

서명 확인 기능은 주어진 서명이 일치하는지 확인합니다. 이 문서및 사용자의 공개 키. 사용자의 공개 키는 모든 사람이 사용할 수 있으므로 누구나 이 문서의 서명을 확인할 수 있습니다.

서명할 문서의 길이가 가변적이기 때문에 EDS 체계에서 서명은 문서 자체가 아니라 해시에 위치하는 경우가 많습니다. 해시는 서명이 확인될 때 문서 변경 사항이 감지되도록 암호화 해시 함수를 사용하여 계산됩니다. 해시 함수는 EDS 알고리즘의 일부가 아니므로 모든 신뢰할 수 있는 해시 함수를 체계에서 사용할 수 있습니다.

보안

디지털 서명은 다음을 제공합니다.

  • 문서 소스의 ID입니다. 문서 정의의 세부 사항에 따라 "author", "changes made", "timestamp" 등과 같은 필드가 서명될 수 있습니다.
  • 문서 변경에 대한 보호. 문서(또는 서명)의 우발적 또는 고의적 변경은 해시를 변경하므로 서명이 무효화됩니다.
  • 저자권 거부 불가능. 개인키를 알아야만 올바른 서명을 생성할 수 있고, 그것은 소유자만 알고 있기 때문에 소유자는 문서에 대한 자신의 서명을 거부할 수 없습니다.

다음과 같은 디지털 서명 위협이 가능합니다.

  • 공격자는 자신이 선택한 문서의 서명을 위조하려고 시도할 수 있습니다.
  • 공격자는 문서를 주어진 서명과 일치시켜 서명이 일치하도록 할 수 있습니다.
  • 공격자는 문서 서명 위조를 시도할 수 있습니다.

신뢰할 수 있는 해시 함수를 사용할 때 실제와 동일한 해시로 가짜 문서를 만드는 것은 계산적으로 어렵습니다. 그러나 이러한 위협은 특정 해싱 알고리즘, 서명 또는 구현 오류의 약점으로 인해 실현될 수 있습니다.

그럼에도 불구하고 디지털 서명 시스템에 대한 이러한 위협은 여전히 ​​가능합니다.

  • 개인 키를 훔친 공격자는 키 소유자를 대신하여 모든 문서에 서명할 수 있습니다.
  • 공격자는 예를 들어 블라인드 서명 프로토콜을 사용하여 문서에 서명하도록 소유자를 속일 수 있습니다.
  • 공격자는 소유자의 공개 키(키 관리 참조)를 자신의 공개 키로 교체하여 가장할 수 있습니다.
EDS 알고리즘
  • 전자 디지털 서명에 대한 미국 표준: DSA, ECDSA
  • 전자 디지털 서명에 대한 러시아 표준: GOST R 34.10-94(현재 유효하지 않음), GOST R 34.10-2001
  • 전자 디지털 서명에 대한 우크라이나 표준: DSTU 4145-2002
  • PKCS # 1 표준은 특히 RSA 알고리즘을 기반으로 하는 전자 전자 서명 체계를 설명합니다.
핵심 관리

EDS 시스템을 포함한 모든 공개 키 암호화에서 중요한 문제는 공개 키 관리입니다. 모든 사용자가 다른 사용자의 정품 공개 키에 액세스할 수 있는지 확인하고, 이러한 키가 침입자에 의해 대체되지 않도록 보호하고, 손상될 경우 키의 취소를 구성해야 합니다.

대체로부터 키를 보호하는 문제는 인증서의 도움으로 해결됩니다. 인증서를 사용하면 신뢰할 수 있는 사람의 서명으로 소유자 및 공개 키에 대한 데이터를 확인할 수 있습니다. 중앙 집중식 인증서 시스템(예: PKI)은 신뢰할 수 있는 조직에서 지원하는 인증 기관을 사용합니다. 분산 시스템(예: PGP)에서 신뢰 웹은 각 사용자가 친구와 신뢰할 수 있는 사람들의 인증서를 교차 서명하여 구축합니다.

인증서 배포 센터는 키 관리를 담당합니다. 이러한 센터에 연락하여 사용자는 모든 사용자의 인증서를 얻을 수 있을 뿐만 아니라 이 또는 해당 공개 키가 취소되었는지 확인할 수 있습니다.

RSA 알고리즘에 대한 설명

RSA- 공개 키 암호화 알고리즘. RSA는 암호화와 디지털 서명 모두에 적합한 최초의 제품이었습니다. 알고리즘은 많은 암호 응용 프로그램에서 사용됩니다.

이야기

영국 정부 통신 센터(GCHQ)에서 근무한 영국 수학자 Clifford Cocks는 1973년 센터 내부 문서에서 유사한 시스템을 설명했지만 이 작업은 1977년까지 공개되지 않았고 Rivest, Shamir 및 Adleman이 작업과 독립적으로 RSA를 개발했습니다. 콕스.

1983년 MIT는 2000년 9월 21일에 만료된 미국 특허 4,405,829를 취득했습니다.

알고리즘 설명

RSA 알고리즘의 보안은 인수분해 문제의 난이도를 기반으로 합니다. 알고리즘은 공개 키와 개인 키의 두 가지 키를 사용하며 공개 키와 해당 개인 키가 함께 키 쌍을 형성합니다. 공개 키는 비밀로 유지할 필요가 없으며 데이터를 암호화하는 데 사용됩니다. 메시지가 공개 키로 암호화된 경우 해당 비밀 키로만 복호화할 수 있습니다.

키 생성

키 쌍을 생성하기 위해 다음 작업이 수행됩니다.

1. 두 개의 큰 소수가 선택되고

2. 그들의 제품이 계산됩니다

3. 오일러 함수가 계산됩니다.

4. 정수는 다음과 같이 선택됩니다. 와 동감하다

5. 확장된 유클리드 알고리즘을 사용하여 다음과 같은 숫자를 찾습니다.

숫자이며 암호문으로 사용됩니다. 암호를 해독하려면 다음을 계산해야 합니다.

해독할 때 원본 메시지를 복원하는지 확인하는 것은 어렵지 않습니다.

조건에서

다음을 따른다

따라서 일부 정수에 대해

오일러의 정리에 따르면:

알고리즘의 일부 기능

소수 생성

두 개의 큰 소수를 찾고 키를 생성할 때 일반적으로 숫자에 대한 확률적 단순성 테스트를 사용하여 합성 숫자를 빠르게 식별하고 삭제할 수 있습니다.

· 오픈 인디케이터의 값이 작은 경우(예를 들어), 그것이 판명되는 상황이 가능합니다. 그런 다음 침입자는 정도의 루트를 계산하여 원본 메시지를 쉽게 복구할 수 있습니다.

· RSA는 결정론적 알고리즘이므로 프로세스에서 임의의 값을 사용하지 않으면 공격자는 선택한 일반 텍스트로 공격을 사용할 수 있습니다.

나열된 문제를 해결하기 위해 메시지는 각 암호화 전에 임의의 값인 salt로 보완됩니다. 패딩은 다음을 보장하는 방식으로 수행됩니다. 또한 메시지는 랜덤 데이터로 보완되기 때문에 동일한 평문을 암호화할 때 매번 다른 암호문 값을 수신하므로 선택된 평문으로 공격이 불가능합니다.

열린 표시기의 값 선택

RSA는 대칭 알고리즘보다 훨씬 느립니다. 암호화 속도를 높이기 위해 열린 지수는 일반적으로 3, 17 또는 65537로 작게 선택됩니다. 이진 형식의 이러한 숫자는 2개만 포함하므로 거듭제곱할 때 필요한 곱셈 연산 수를 줄입니다. 예를 들어, 숫자를 17의 거듭제곱으로 올리려면 5개의 곱셈 연산만 수행하면 됩니다.

충분히 커야 합니다. 1990년에 Michael J. Wiener는 작은 것을 선택하면 충분히 큰 것으로 판명되고 문제가 없음을 보여주었습니다.

키 길이

숫자 N최소 512비트 크기여야 합니다. 현재 RSA 기반 암호화 시스템은 1024비트의 크기 N부터 신뢰할 수 있는 것으로 간주됩니다.

RSA 애플리케이션

RSA는 소프트웨어 보호 및 디지털 서명 체계에 사용됩니다. 에서도 사용됩니다. 개방형 시스템암호화 PGP.

낮은 암호화 속도(2GHz 프로세서에서 512비트 키의 경우 약 30kbps)로 인해 메시지는 일반적으로 임의 키( 세션 키), 이 키만 RSA를 사용하여 암호화됩니다.

Ⅱ. 구현

예를 들어 파일의 디지털 서명 및 서명 확인을 위한 프로그램이 구현되었습니다. RSA 알고리즘과 X.509 인증서가 사용되었습니다. 사용자 인증서는 Windows 인증서 저장소에서 가져옵니다.

디지털 서명은 다음 위치에 저장됩니다. xml 파일이름이 있는<имя исходного файла>.sig.xml

코드 조각

공개 클래스 서명

개인 X509Certificate2 인증서;

개인 DateTime 날짜;

개인 바이트 signedHash;

공개 X509Certificate2 인증서

얻다 (증명서를 돌려주다;)

설정(인증서 = 값;)

공개 날짜/시간 날짜

get (돌아온 날짜;)

설정(날짜 = 값;)

공개 무효 기호(문자열 입력, X509Certificate2 인증서)

this.certificate = 새로운 X509Certificate2(인증서);

날짜 = DateTime.Now;

signedHash = ((RSACryptoServiceProvider) cert.PrivateKey) .SignData(Utils.StringToBytes(stringToEncrypt), 새로운 MD5CryptoServiceProvider());

public bool IsValid(문자열 입력)

문자열 stringToEncrypt = 입력 + 날짜.Ticks;

반환((RSACryptoServiceProvider) 인증서.PublicKey.Key) .VerifyData(Utils.StringToBytes(stringToEncrypt), 새 MD5CryptoServiceProvider(), signedHash);

공개 바이트 SignedHash

가져오기(signedHash 반환;)

설정(signedHash = 값;)

무효 DisplaySignatureList()

FileSignatures fileSignatures = ReadSignatures(GetSignaturesFileName(fileNameTextBox.Text));

서명 목록 텍스트 상자.텍스트 = "";

foreach(fileSignatures.Signatures의 서명 서명)

문자열 행 = "";

행 + = 서명.Certificate.Subject;

행 + = "" + signaure.Date.ToString();

문자열 해시 = GetFileHash(fileNameTextBox.Text);

부울 유효 = 서명.IsValid(해시);

행 = "v" + 행;

행 = "x" + 행;

signatureListTextBox.Text + = 행 + "\ r \ n";

III. 문학

  1. S. Burnet, S. Payne: 암호화. 공식 가이드 RSA 보안 - M. "Binom", 2002
  2. V. Winter: 글로벌 네트워크 기술의 보안 - "BHV-Petersburg", 2003
  3. Wenbo Mao 현대 암호학: 이론과 실제 = 현대 암호학: 이론과 실제. - M .: "Williams", 2005. - S. 768. ISBN 0-13-066943-1
  4. Nils Ferguson, Bruce Schneier Practical Cryptography: 보안 암호화 시스템 설계 및 구현. - M .: "변증법", 2004. - S. 432. ISBN 0-471-22357-3
  5. 슈나이어, 브루스. 적용된 암호화. 프로토콜, 알고리즘, C 언어의 소스 텍스트 - M .: 출판사 TRIUMPH, 2002 - 816s.: Ill. ISBN 5-89392-055-4

모든 사용자가 개인이 아닙니다. 컴퓨터 기술 RSA 암호화가 무엇인지 알고 이해하고 이 용어의 소리에 놀랐습니다. 그러나 이 개념에는 복잡한 것이 없습니다. RSA 암호화는 컴퓨터 기술에서 생성된 모든 전자 데이터를 안전한 방식으로 사용할 수 있게 해주는 암호 시스템일 뿐입니다. 특정 코드를 모르면 파일을 읽을 수 없는 경우 데이터 암호 해독이 아닙니다. RSA 암호화는 키가 공개되어 있다고 가정합니다.

RSA 암호화는 인수분해 원칙에 따라 작동합니다. 이와 같이? 그리고 이것은 인수분해
두 개의 큰 숫자 데이터를 재생합니다.

RSA 암호화 시스템은 누가 만들었습니까?

RSA 암호화 알고리즘은 1977년에 만들어졌으며 그 제작자는 과학자 Rivest, Shamir, Adleman이며 성의 첫 글자의 약어는 RSA입니다. 초기 알고리즘은 영국 정보국에서 근무한 영국의 수학자 Clifford Cox가 개발했습니다. 1973년 그는 등가 시스템, 그러나 그것은 비밀 인물에 의해서만 사용되었으며 기술은 수준에서 확장되지 않았습니다. 일반 사용자개인용 컴퓨터 장비.

RSA 암호화는 어떻게 작동합니까?

시스템 사용자는 먼저 보조 값만 있는 두 개의 큰 숫자를 기반으로 하는 공개 키를 만든 다음 게시합니다. 가장 단순한 숫자는 비밀로 유지됩니다. 예를 들어 이메일 메시지를 읽으려면 문서에 대한 공개 키를 사용하면 되지만 키가 길면 정보 접근에 어려움이 있다.

오늘날 RSA 암호화는 그다지 신뢰할 수 없는 데이터 암호화 방법으로 특징지어집니다. 이것은 느린 알고리즘이므로 일반 컴퓨터 사용자에게는 그리 일반적이지 않습니다. 그렇다면 일반 컴퓨터 과학자들이 실제로 사용하지 않는 시스템이라면 왜 이 시스템이 만들어졌을까요?

요점은 고속의 대량 암호화 및 복호화를 위해 설계된 대칭 암호화 키에 대한 공유 키의 암호화 전송에 응용 프로그램을 찾았다는 것입니다.

비대칭 키의 현대 암호 시스템은 Diffie와 Hellman의 작업 덕분에 나타났습니다. 그들은 1976년에 이 개념을 개발하여 디지털 녹음으로 대중에게 선보였습니다. 그들은 특정 숫자 모듈로 소수의 노출 원칙에 따라 공통 키를 만들었습니다. 그러나 그 당시에는 인수분해의 원리 자체가 아직 잘 연구되지 않았기 때문에 그들의 원리는 공중에 떠 있는 채로 남겨졌습니다.

Rivest, Adim Shamir, Adleman은 이전에 달성한 것에 그치지 않고 해독하기 쉽지 않은 단방향 함수의 메커니즘을 철저히 연구했습니다. Adleman이 찾고 있는 동안 Rivest와 Shamir는 기능 자체에 대해 직접 작업했습니다. 약점생성되는 알고리즘에서 결국 그들은 RSA 비대칭 키 시스템을 만드는 데 성공했습니다.

디지털 서명 및 공개 키 통신

현재 많은 회사에서 이러한 전자 요소를 작업에 디지털 서명으로 사용합니다. 이른바 전자서명이 포함된 생성된 전자문서는 법적으로 인정되는 공문서이다. 데이터가 암호화 방식으로 변경되면 전자 디지털 서명이 생성됩니다.

일반적인 서명에 대한 이 대안을 사용하면 문서를 기밀로 만들고 무결성을 보장하며 항상 작성자와 소유자에 대한 정보를 가질 수 있습니다.

전자 서명은 고려 중인 RSA 암호화와 밀접한 관련이 있습니다. 이 시스템은 위에서 언급한 것처럼 공개 키가 있다고 가정합니다. 오늘날 실제로는 승인되지 않은 사람이 정보에 액세스하는 것을 방지하기 위해 모든 사람에게 알려진 공개 키와 비공개 키의 두 가지 키가 사용됩니다.

따라서 공개 키는 전자 인감으로 문서에 액세스할 수 있게 하고 개인 키는 서명을 해독하고 확인할 수 있도록 합니다. 즉, RSA 암호화를 사용하면 다음 위치에서 문서를 숨길 수 있습니다. 엿보는 눈, 분류하지만 적시에 액세스할 수 있는 기능이 있습니다.

발명된 알고리즘의 본질이 무엇인지 볼까요?

RSA 암호화는 4단계로 작동합니다.
키 생성;
키 배포;
키 암호화;
키 해독.

RSA 암호화 원칙은 개방형 및 개인 키... 이것에 대해 다시 생각해 봅시다. 공개 - 모두에게 알려져 있으며 메시지를 암호화하는 데 사용할 수 있습니다. 이 전자 데이터는 개인 키를 사용하여 해독할 수 있습니다. 공개 키를 생성할 때 난수와 동일한 숫자가 선택되지만 길이가 다르기 때문에 인수분해가 더 어렵습니다.

단순성 테스트를 수행하여 동일한 숫자를 찾습니다. 따라서 암호화는 점차 정교해졌습니다. 공개 키는 무엇으로 구성되어 있습니까? 그리고 일반 모듈과 소위 공개 전시업체로 구성됩니다. 그러나 폐쇄된 것은 모듈과 개인 지표를 포함하며 이는 작성자 외에는 제공되지 않습니다.

RSA 암호화 기술의 약점

암호화의 잘 생각한 원칙에도 불구하고 쉽게 깨질 수 있습니다. 작은 숫자를 사용하여 키를 만든 경우 이 작업을 수행할 수 있으며 소수의 정수를 간단히 선택하여 키를 표시할 수 있습니다.

RSA 암호화 자체는 확률이 없는 알고리즘이므로 사기꾼이 쉽게 컴퓨터 네트워크결정적 메커니즘을 깨고 실행된 텍스트가 생성된 키의 길이와 지속적으로 동일한지 여부를 확인하는 도스 공격의 일반 텍스트를 선택합니다.

그리고 이것은 무엇보다도 RSA 암호화가 원치 않는 사람의 침입으로부터 전자 데이터를 보호하기 위해 모든 면에서 안전한 동일한 암호 시스템이 아니라는 것을 설명합니다. 더 고급 서버에 추가될 때 이러한 속성을 획득하지 않는 한.

RSA 암호화 사용의 보안을 보장하기 위한 추가 구성 요소

RSA 형식의 암호화를 깨뜨릴 가능성을 방지하기 위해 프로그래머는 구조화된 소위 무작위 채우기 형식을 여기에 삽입합니다. 이는 전자 정보 자체를 암호화하기 전에 수행됩니다. 이 순간은 전자 문서의 내용이 모든 사람에게 제공되지 않고 게으르지 않은 사람에게, 문서에 무작위 키 선택 메커니즘을 적용할 때 기밀 정보를 볼 수 없다는 것을 보장합니다.

RSA 암호화는 수학적 숫자를 요소로 분해하지만 메커니즘이 완성된 적이 없습니다. 따라서 현재 사이버 범죄자들은 ​​데이터 암호화를 깨는 방법을 선택할 수 있는 기회와 많은 허점을 가지고 있습니다. 그리고 그들이 할 수 있는 것은 정확히 주요 요인 회복 메커니즘입니다.

사기꾼은 공개 키에 포함된 비밀 지표를 계산하고 표준 방법을 사용하여 문서를 해독합니다. 따라서 실제로 회사에 해를 끼치려는 사람들의 행동 분야는 상당히 큽니다. RSA 암호화 보안의 문제는 여전히 관련성이 있고 공개되어 있지만 공개적으로 이야기하는 사람은 거의 없다고 가정해 보겠습니다.

자동화된 전자 데이터 암호화 프로세스

낮은 보안 점수에도 불구하고 문제의 RSA 암호화는 많은 산업 분야에 적용할 수 있습니다. 전자 문서가 많이 유통되는 경우 특히 환영합니다. RSA 암호화가 중간 수준의 책임에서 문서를 보호하는 데 사용된다고 가정해 보겠습니다.

Yafu 소프트웨어는 전자 데이터의 자동 암호화를 가능하게 합니다. 이 프로그램을 사용하면 안정성 인수분해 규칙을 준수하여 비대칭 키 생성을 위한 데이터를 빠르게 찾을 수 있습니다. SIQS, ECM, SNFS와 같은 프로세서와 호환됩니다. 를 통해 시작됩니다. 명령줄... 이 명령을 문자열에 입력하면 키를 생성하기 위한 데이터 검색 시간을 크게 줄일 수 있습니다.

개인용 컴퓨터 장비의 일반 사용자는 이 소프트웨어에 대처할 수 없습니다. 설치 및 구성하려면 특정 지식이 필요하며 이는 종종 IT 프로그래머와 전문가가 수행합니다.

RSA 암호화는 디스크에서 수천 비트에 달하는 공개 및 개인 키를 생성하는 데 많은 숫자가 사용된다는 사실에도 불구하고 심각하게 취약합니다.

Bedjamin Moody는 2009년에 공개 키와 개인 키를 해독하는 과정이 가능하다는 것을 증명했습니다. 이를 위해서는 2년 이상이 걸릴 수 있지만 전 세계의 많은 컴퓨터 시스템이 해킹당할 위험이 있다는 사실은 변함이 없습니다.

예를 들어, 이 전문가는 주요 스크립트를 살펴보는 데 특별한 것이 필요하지 않았습니다. 일반 컴퓨터사용자와 소프트웨어 GGNFS. 수천 분의 1 비트의 암호화 키를 사용하더라도 정보가 다른 사용자가 액세스할 수 없는 기밀로 필드를 벗어나는 것을 방지할 수 없습니다.

물론 RSA 암호화를 해독하려면 시간이 걸립니다. 많은 해커가 긍정적인 결과를 얻는 데 몇 년이 걸립니다. 이들은 종종 올바른 열쇠를 계속 찾는 데 관심을 불러일으키는 고임금 잠재 고객입니다. 대부분의 경우 더 간단한 관점을 찾아 긴 키 크래킹을 포기합니다. 그러나 이것이 아무도 더 단순화된 키 크래킹 메커니즘을 만들려고 하지 않는다는 것을 의미하지는 않습니다.

사기꾼의 침입 공격에 대한 주요 보호 기능은 2,000비트 이상의 크고 긴 키를 생성하는 것입니다. 100~500비트 길이의 키를 크래킹하는 것으로 알려진 사례가 이미 있습니다. 따라서 귀를 예리하게 유지해야 합니다. 짧은 키를 해독하는 메커니즘이 있는 경우 전자 데이터 암호화의 가장 긴 조합을 해독하기 위해 악의를 품은 쪽 어딘가에서 작업이 한창 진행 중일 것입니다.

결론

위의 내용을 기반으로 RSA 암호화는 길고 정보적으로 큰 키가 생성되는 경우 전자 데이터의 기밀성을 유지하는 안전한 방법입니다.

수동으로 선택하기 어렵기 때문에 자동으로 소프트웨어야후. IT 전문가가 설치 및 구성합니다. 독립적 인 일깰 수 있습니다 운영 체제컴퓨터.
이 소프트웨어는 오늘날의 멀티 코어 컴퓨터 프로세서와 함께 작동하도록 설계되었습니다.

사기 공격의 주요 대상은 대규모 산업 및 금융 회사이므로 RSA 암호화 없이는 전자 문서 순환이 작동하지 않습니다. 문서의 전자서명도 암호화의 대상이 되며, 다른 정보데이터와 동일한 보안기준이 적용됩니다. 원칙 - 키가 클수록 문서를 해독하기가 더 어렵습니다 - 공개용이 아닌 모든 데이터에 절대적으로 적용되어야 합니다.

"잘못된" RSA 암호 매개변수를 선택하는 예는 아래에 설명되어 있습니다.

"RSA 모듈(숫자 N) 각 네트워크 통신원에 대해. 이와 관련하여 다음과 같이 말할 수 있다. 독자는 세 가지 수량 중 하나를 알고 있는지 독립적으로 확인할 수 있습니다. , 또는 φ (n), RSA 비밀 키를 쉽게 찾을 수 있습니다 ... ".

이 텍스트를 보완해 보겠습니다. RSA 암호 모듈의 선택이 실패하면 아래 자습서의 예에서와 같이 비밀 키가 없어도 텍스트를 해독할 수 있습니다. 세 개의 명명된 수량을 알지 못합니다.

이렇게 하려면 cipher 모듈에 의해 지정된 암호 텍스트를 갖는 것으로 충분합니다. N, 공개 키 이자형키가 없는 읽기 공격의 3단계만 수행합니다. 네 번째 공격 단계 후, 원본 텍스트는 이전 단계에서 획득한 것으로 설정되며 읽을 수 있습니다. 얼마나 쉬운지 보여드리겠습니다.

먼저, 명명된 매뉴얼의 pp. 313-315에 있는 예제를 제공합니다.

예시

암호화짧은 원본 문자 메시지: RSA.
수신자는 특성을 가진 암호를 설정합니다. n = pq = 527, 어디 피 = 17, q = 31그리고 φ (n) = (р -1) (q - 1) = 480... 공개키로 이자형상대적으로 소수인 숫자가 선택됩니다. φ (n), 전자 = 7... 이 숫자에 대해 확장된 유클리드 알고리즘을 사용하여 정수를 찾습니다. 그리고 V관계를 만족시키는 전자 ∙ 유 + φ (n) ∙ v = 1:

480=7∙68+4,
7=4∙1+3,
4=3∙1+1,
1=4–3∙1=4–(7–4∙1)∙1=4∙2–7∙1=(480–7∙68)∙2–7∙1=480∙2–7∙137,
v = 2, u = -137
.

하는 한 –137≡343 (mod480), 그 다음에 d = 343.

시험: 7 ∙ 343 = 2401≡1 (mod480).

문자 메시지는 간격에 포함된 일련의 숫자로 표시됩니다. ... 이를 위해 편지 아르 자형, 에스그리고 5비트 이진수로 인코딩됩니다. 영어 알파벳에서 이러한 문자의 서수는 이진 표현과 함께 사용됩니다.

R = 18 10 = (10010) 2, S = 19 10 = (10011) 2,
A = 1 10 = (00001) 2.

그 다음에 RSA = (100101001100001) 2... 텍스트를 제한된 길이의 블록으로 나누면 두 블록이 표시됩니다. RSA = (100101001), (100001) = (M 1 = 297, M 2 = 33).

원본 텍스트 블록을 순차적으로 암호화 남 1 = 297, 남 2 = 33:
y 1 = E k (M 1) = M 1 e ≡297 7 (mod527) = 474.

여기서 우리는 다음 사실을 사용했습니다.

297 7 = ((297 2) 3) 297≡ (mod527) = (200 3 (mod527) 297) (mod527) = 474,
y 2 = E k (M 2) = M 2 e ≡33 7 (mod527) = 407.

암호문은 원본과 마찬가지로 두 블록의 형태로 얻습니다. y 1 = 474; y 2 = 407.

복호화일련의 행동으로 보인다 D k (y i) = (y i) d = (y i) 343 (mod 527), 나는 = 1.2.

지수 계산 지수를 숫자의 거듭제곱의 합으로 미리 표시하여 수행하는 것이 더 편리합니다. 2 , 즉: 343=256+64+16+4+2+1 .

이 지수 표현을 사용하여 d = 343, 우리는 다음을 얻습니다.

474 2 ≡174 (mod527),
474 4 ≡237 (mod527),
474 8 ≡307 (mod527),
474 16 ≡443 (mod527),
474 32 ≡205 (mod527),
474 64 ≡392 (mod527),
474 128 ≡307 (mod527),
474 256 ≡443 (mod527),

그리고 마지막으로 474 343 (mod527) = (443 ∙ 392 ∙ 443 ∙ 237 ∙ 174 ∙ 474) (mod527) = 297.

값은 유사하게 계산됩니다. 407 343 (mod527) = 33.

해독된 메시지의 리터럴 표현으로 전환하면 다음이 제공됩니다. RSA.

예제를 살펴본 후 이 자습서에서는 RSA 시스템의 견고성에 대해 설명합니다. RSA 암호 모듈(숫자 N) 각 네트워크 통신원에 대해. 암호화 시스템의 선택된 특성에 대한 요구 사항을 무시하는 것은 허용될 수 없다는 점을 지적합니다. 이러한 요구 사항 중 불행히도 주어진 예에서 위반 사항이 표시된 것은 표시되지 않습니다.

RSA 암호 공격

RSA 암호에 대한 공격의 예를 고려하십시오. A.P.의 "Fundamentals of Cryptography" 튜토리얼에서 313-315 페이지에 제공된 예제의 데이터를 사용합시다. 알페로프, A. 유. 주보프, A.S. Kuzmin, A.V. 모스크바 체료무쉬킨. "헬리오스 ARV", 2001.

이 예에서 선택한 시스템 매개변수의 실패(허용 불가)는 소스 텍스트에 대한 키리스 읽기 공격을 구현하는 계산에 의해 쉽게 표시됩니다. 그러한 공격의 본질은 다음과 같습니다. 공개 RSA 암호 키( 전자 = 7, n = 527) 및 암호문. 예제에서 암호문은 두 개의 블록으로 표시됩니다.
y = (y 1 = 474, y 2 = 407).

각 암호화된 블록은 개별적으로 공격을 받습니다. 먼저 우리가 공격합니다. y 1 = 474, 복호화 후 다른 블록 공격 y 2 = 407.

또한 공격 알고리즘의 연속 2단계 결과를 저장하고 일련의 숫자 값을 공개 키를 사용하여 반복적으로 암호화하여 구성합니다. , y 1 = y사용 가능한 암호문.

암호문 공격 알고리즘은 이러한 단계 번호를 정의합니다. 제이, 무엇을 위해 y i e j (mod n) = (y i e j – 1(mod n)) e (mod n) = y i, 나> 1... 마지막 관계에서 우리는 권력을 올릴 때 이자형의미 (y i e j – 1(mod n))초기 암호문을 얻습니다 y 나는 = y 1.

그러나 이것은 또한 이 단계에서 일반 텍스트가 암호화되었음을 의미합니다. 화면 계산기를 사용하여 직접 계산(그 중 거의 없음), 우리는 그 값을 찾습니다 제이, 암호화 주기가 값으로 끝나는 시점 1번사이클이 시작된 곳.

첫 번째 블록에 대한 공격 y 1 = 474암호문.
1 단계:& nbsp 474 7 (mod527) = 382;
2 단계:& nbsp 382 7 (mod527) = 423;
3단계:& nbsp 423 7 (mod527) = 297;
4단계: & nbsp 이 단계에서는 이미 발견된 원본 텍스트를 암호화하지만 공격자가 원본 텍스트를 알지 못하므로 반드시 실행해야 합니다. 암호문의 초기값( 474 ) 및 4번째 암호화 단계의 결과입니다. 이것은 정확히 발생하는 우연의 일치입니다.

297 7 (mod527) = 474암호문의 초기(첫 번째) 블록을 얻었습니다. 첫 번째 블록 공격이 성공적으로 완료되었습니다. y 1 = 474... 3단계의 이전 결과는 일반 텍스트와 같습니다. 남 1 = 297.

n = 527 r = 297모듈로 n = 527... 이렇게 쓰여있습니다 y 나는 = y 1 = 297... 잔류물 형성
(((297 7 (mod527)) 7 (mod527)) 7 (mod527)) 7 = 297.

두 번째 블록에 대한 공격 y 2 = 407암호문.
1 단계:& nbsp 407 7(mod527) = 16;
2 단계:& nbsp 16 7 (mod527) = 101;
3단계:& nbsp 101 7 (mod527) = 33;
4단계:& nbsp 33 7 (mod527) = 407.

다시, 세 번째 단계에서 소스 텍스트 블록을 얻었습니다( 남 2 = 33) 그러나 공격자는 이것을 모르고 다음(네 번째 단계)을 수행하며 그 결과는 ( 407 ) 초기 암호문과 일치 y 2 = 407.

본질적으로 모듈로 잔기의 고리에서 n = 527공제를 위한 짧은 처리 주기를 구현했습니다. r = 33모듈로 n = 527... 이렇게 쓰여있습니다 y 나는 = y 2 = 33.
잔류물 형성 ((33 7 (mod527)) 7 (mod527)) 7 (mod527) = 33.

공격 결과(원본 텍스트 남 1 = 297, 남 2 = 33)는 주어진 암호문을 3번 암호화하여 얻는다. 암호문 공격자의 더 큰 성공은 상상하기 어렵습니다.

모듈 및 기타 암호 매개변수 선택 문제에 대한 논의를 계속하면서 암호 모듈( n = 527) 일부 소스 코드는 암호화를 전혀 허용하지 않습니다. 이 경우 공개키 e 값의 선택은 큰 역할을 하지 않는다. 모듈로 선택한 암호로 전혀 암호화할 수 없는 원본 텍스트의 값이 있습니다. n = 527.

주어진 e 중 어느 것도 숫자로 표시되는 소스 텍스트를 암호화할 수 없습니다.
187 , 341 , 154 그리고 373 .

예시(일부 소스 텍스트의 값을 암호화할 수 없음)

소스 텍스트를 4개의 블록으로 나타내도록 하십시오. y = (y 1 = 154, y 2 = 187, y 3 = 341, y 4 = 373)... 출품자 이자형암호의 공개 키는 오일러 함수를 사용하는 상호 소수일 수 있습니다. φ(n) = φ(527) = 480... 그러나 고려 중인 경우 공개 키는 이자형임의로 설정할 수 있습니다. 과연, 하자 e = 2, 4, 7, 9, 17, 111그 다음에:

154 2 (mod527) = 1;
154 4 (mod527) = 1;
154 7 (mod527) = 154;
154 9 (mod527) = 154;
154 17 (mod527) = 154;
154 111 (mod527) = 154;
187 2 (mod527) = 187;
187 4 (mod527) = 187;
187 7 (mod527) = 187;
187 9 (mod527) = 187;
187 17 (mod527) = 187;
187 111 (mod527) = 187;
341 2 (mod527) = 341;
341 4 (mod527) = 1;
341 7 (mod527) = 341;
341 9 (mod527) = 341;
341 17 (mod527) = 341;
341 111 (mod527) = 341;
373 2 (mod527) = 1;
373 4 (mod527) = 373;
373 7 (mod527) = 373;
373 9 (mod527) = 373;
373 17 (mod527) = 373;
373 111 (mod527) = 373.

고려한 예에서 간단한 결론이 나옵니다. 실제로 암호화 프로세스에 대한 매개변수 선택은 매우 신중하게 접근해야 하며 이러한 매개변수에 대한 철저한 사전 분석이 수행되어야 합니다. 이것을 하는 방법은 별도의 질문이며 이 작업의 틀 내에서 고려되지 않습니다.

두 번째 부분에서는 공개 키가 암호화에 사용되는 인기 있는 RSA 알고리즘을 살펴보겠습니다. 하지만 먼저 다시 한 번 경고하고 싶습니다. 이 문서에 제공된 코드는 정보 제공용입니다. 암호화는 매우 방대하고 복잡한 영역이므로 문제가 없으시도록 제 기술을 사용하여 정보를 암호화하는 것은 권장하지 않습니다.

두 번째 부분에서는 공개 키가 암호화에 사용되는 인기 있는 RSA 알고리즘을 살펴보겠습니다. 하지만 먼저 다시 한 번 경고하고 싶습니다. 이 문서에 제공된 코드는 정보 제공용입니다. 암호화는 매우 방대하고 복잡한 영역이므로 문제가 없으시도록 제 기술을 사용하여 정보를 암호화하는 것은 권장하지 않습니다.

RSA 알고리즘

공개 키 암호화

공개 키 암호화는 어디에나 있습니다. 온라인에서 한 번 이상 결제한 적이 있다면 이미 이 방법을 사용한 적이 있을 것입니다(희망합니다!). 이 보호가 어떻게 작동하는지 즉시 의문이 생깁니다. 내 번호를 입력하면 신용 카드, 물건을 사기 위해 수취인 외에 아무도 이 정보를 염탐할 수 없는 이유는 무엇입니까? 비유를 드리겠습니다. 금고를 열려면 열쇠(또는 망치가 필요하지만 다행히도 금고와 자물쇠는 이런 종류의 사람으로부터 보호됩니다)가 필요합니다. 공개 키 암호화를 사용하면 거의 동일한 일이 발생합니다. 모든 사람이 볼 수 있도록 자물쇠를 보여주지만 이 자물쇠의 열쇠는 소수에 불과하며 다른 방법으로 문을 여는 것은 거의 불가능합니다.

RSA는 위의 방식을 구현하는 알고리즘 중 하나입니다. 또한 이 알고리즘을 사용하여 신원을 인증할 수 있습니다. 개인 키를 사용하여 암호화된 메시지를 다른 사람에게 보내면 수신자는 공개 키를 사용하여 메시지를 해독할 수 있습니다. 이 기술을 사용하면 메시지에 서명할 수 있으므로 보낸 사람의 신원을 확인할 수 있습니다.

RSA 알고리즘 기반 데모 프로그램

RSA e와 d의 두 가지 유형의 키를 사용합니다. 여기서 e는 공개이고 d는 비밀입니다. P가 원본 텍스트이고 C가 암호문이라고 가정합니다. Alice는 C = Pe mod n을 사용하여 원본 텍스트 P에서 암호문 C를 만듭니다. Bob은 Alice가 보낸 원본 텍스트(파일)를 추출하기 위해 P = C d mod n을 사용합니다. 키 생성 프로세스를 사용하여 매우 많은 n개의 모듈이 생성되며, 이에 대해서는 나중에 설명합니다.

암호화 및 암호 해독을 위해 지수 모듈로가 사용됩니다. 강의 12-13에서 논의한 바와 같이 고속 알고리즘을 사용할 때 다항식 시간에서 계수 모듈로가 가능합니다. 그러나 모듈러 로그를 찾는 것은 모듈러스에서 숫자를 확장하는 것만큼 어렵습니다. 이에 대한 다항식 시간 알고리즘은 없습니다. 이것은 Alice가 다항식 시간에 공개 키(e)로 메시지를 암호화할 수 있음을 의미합니다. Bob은 d를 알고 있기 때문에 다항식 시간에 암호를 해독할 수도 있습니다. 그러나 Eve는 모듈식 산술을 사용하여 C의 e번째 근을 계산해야 하기 때문에 이 메시지를 해독할 수 없습니다. 그림 14.5는 RSA의 이면에 있는 아이디어를 보여줍니다.


쌀. 14.5.

즉, 앨리스는 다음을 사용합니다. 단방향 함수(지수 모듈로) Bob에게만 알려진 허점이 있습니다. Eve는 허점을 알지 못하므로 메시지를 해독할 수 없습니다. 언젠가 n의 e번째 근을 계산하는 계수에 대한 다항식 알고리즘이 발견되면 계수 n은 더 이상 단방향 함수가 아닙니다.

절차

그림 14.6은 RSA에서 사용되는 절차의 일반적인 개념을 보여줍니다.

RSA는 암호화/복호화에 지수를 사용합니다. 닫힌 텍스트를 공격하기 위해 Eve는 다음을 계산해야 합니다.


쌀. 14.6.
두 개의 대수적 구조

RSA는 링과 그룹이라는 두 가지 대수 구조를 사용합니다.

암호화/복호화 링... 암호화 및 암호 해독은 교환 링을 사용하여 수행됩니다. 덧셈과 곱셈의 두 가지 산술 연산으로. RSA에서 이 링은 모듈 n이 공개적으로 사용 가능하기 때문에 공개적으로 사용 가능합니다. 누구나 이 암호화 링을 사용하여 Bob에게 메시지를 보낼 수 있습니다.

키 생성 그룹... RSA는 곱셈 그룹을 사용합니다. 키를 생성합니다. 그룹은 공개 키와 개인 키를 생성하는 데 필요한 곱셈과 나눗셈(승법 역)만 지원합니다. 이 그룹은 해당 모듈이 비밀이므로 숨겨져 있어야 합니다. Eve가 이 모듈을 찾으면 암호화 시스템을 쉽게 공격할 수 있음을 알 수 있습니다.

RSA는 두 개의 대수 구조를 사용합니다. 열린 고리 R =< Z N , +, x> 및 비밀 그룹 G =< Z (N) * , 엑스>.

키 생성

Bob은 알고리즘 14.2에 표시된 단계를 사용하여 공개 키와 개인 키를 생성합니다. 키를 생성한 후 Bob은 튜플(e, n)을 공개 액세스 키로 선언합니다. Bob은 d를 개인 키로 저장합니다. 밥은 p, q를 떨어뜨릴 수 있습니다. 모듈을 변경하지 않고 개인 키를 변경할 수 없습니다. 안전을 위해 각 소수 p 또는 q에 권장되는 크기는 512비트(거의 154자리 십진수)입니다. 이것은 단위의 크기를 정의합니다. n 1024비트(309자리)입니다.

14.2. RSA 키 생성

RSA에서 튜플(e, n)은 공개 액세스 키입니다. 정수 d - 비밀 키.

암호화

누구나 Bob의 공개 액세스 키를 사용하여 메시지를 보낼 수 있습니다. RSA의 암호화는 알고리즘 14.3에 표시된 것처럼 다항식 시간 복잡도 알고리즘을 사용하여 수행할 수 있습니다. 빠른 지수 알고리즘은 강의 12-13에서 논의되었습니다. 소스 텍스트의 크기는 n보다 작아야 합니다. 소스 텍스트의 크기가 더 크면 블록으로 나누어야 합니다.



관련 기사: