2010-04-04 3 views
2

대칭 암호화 알고리즘의 성능은 암호화되는 데이터의 양에 따라 좌우됩니까? 네트워크를 통해 빠르게 전송해야하는 약 1000 바이트가 있다고 가정하면 한 번에 50 바이트의 데이터를 20 번 또는 1000 바이트를 암호화하는 것이 더 좋습니다. 어느 것이 더 빠를 것인가? 그것은 사용 된 알고리즘에 달려 있습니까? 그렇다면 512 바이트 미만의 데이터 양에 대해 가장 성능이 뛰어나고 안전한 알고리즘은 무엇입니까?대칭 암호화 : 성능 질문

답변

5

짧은 대답은 다음과 같습니다

  • 당신은 한 번에 모든 데이터를 암호화 할 수 있습니다. 실제로 암호화 코드에 대한 하나의 함수 호출로 모든 것을 제공하여 더 빨리 실행할 수 있습니다.

  • 적절한 암호화 알고리즘을 사용하면 암호화가 네트워크 자체보다 훨씬 빠릅니다. 암호화가 병목 현상을 일으키기 위해서는 매우 나쁜 구현, 매우 오래된 PC 또는 매우 빠른 네트워크가 필요합니다.

  • 의심 스럽다면 SSL/TLS과 같은 모든 프로토콜을 사용하십시오.프로토콜 내에서 암호화 알고리즘을 선택하면 AES를 사용하십시오. 이제

긴 답변 :

블록 암호스트림 암호이 있습니다

. 스트림 암호는 초기화 단계에서 시작됩니다. 초기화 단계에서는 키가 시스템에 입력되고 ("키 일정"이라고도 함) 데이터 바이트를 "즉시"암호화합니다. 스트림 암호로 암호화 된 메시지는 입력 메시지와 길이가 같고 암호화 시간은 입력 메시지 길이에 비례하므로 키 일정의 계산 비용이 절약됩니다. 우리는 여기서 큰 숫자를 말하는 것이 아닙니다. 주요 일정 시간은별로 새로운 PC에서는 1 마이크로 초 미만입니다. 그러나 최적의 성능을 얻으려면 50 번이 아니라 한 번 주요 일정을 수행해야합니다.

블록 암호에도 주요 일정이 있습니다. 키 스케줄이 수행 될 때, 블록 암호는 블록, 즉 고정 길이의 데이터 청크를 암호화 할 수있다. 블록 길이는 알고리즘에 따라 다르지만 일반적으로 8 또는 16 바이트입니다. AES는 블록 암호입니다. 임의의 길이의 "메시지"를 암호화하려면 블록 암호를 여러 번 호출해야하며 이는 보안 문제가 많은 것보다 복잡합니다. 이러한 호출을 함께 어셈블하는 방법을 결정하는 부분을 체인 모드이라고합니다. 잘 알려진 체인 모드를 CBC라고합니다. 연쇄 모드에 따라 패딩이라는 추가 단계가 필요할 수 있습니다.이 단계에서는 입력 메시지에 몇 개의 추가 바이트가 추가되어 길이가 선택한 연쇄와 호환 될 수 있습니다. 패딩은 암호 해독시 명확하게 제거 될 수 있어야합니다. 일반적인 패딩 방식을 "PKCS # 5"라고합니다.

효과적으로 블록 암호를 스트림 암호로 변환하는 "CTR"이라는 체인 모드가 있습니다. 그것은 좋은 점을 가지고 있습니다. 특히 CTR 모드에서는 패딩이 필요하지 않으며 암호화 된 메시지 길이는 입력 메시지와 길이가 같습니다. CTR 모드가있는 AES가 좋습니다. 일반적인 PC (예 : 2.4GHz Intel Core2, 단일 코어 사용)의 암호화 속도는 약 100MB/s입니다.

경고 : 같은 키를 가진 메시지를 암호화하는 것과 관련하여 문제가 있습니다. 연쇄 모드에서는 이러한 문제가 "IV"("초기 값")라는 이름으로 숨겨집니다. 대부분의 연쇄 모드에서 IV는 동일한 크기의 암호화 블록에 대한 임의의 값입니다. IV는 비밀이 될 필요가 없다 (해독 당사자도 알고 있어야하기 때문에 암호화 된 메시지와 함께 전송되는 경우도 있음). 그러나 무작위로 균등하게 선택해야하며 각 메시지에는 새로운 IV가 필요합니다. 일부 체인 모드 (예 : CTR)는 특정 키가있는 첫 번째 메시지에 대해서만 비 균일 IV를 허용 할 수 있습니다. CBC에서 첫 번째 메시지조차도 완전히 무작위로 IV가 필요합니다. 이 단락이 완전히 이해되지 않으면 으로 지정하고 암호화 프로토콜을 설계하지 마십시오. 생각보다 복잡합니다. 대신 SSL (암호화 터널의 경우) 또는 CMS (암호화 된 메시지의 경우)과 같이 이미 지정된 프로토콜을 사용하십시오. 그러한 프로토콜의 개발은 길고 고통스런 공격과 대책의 역사였으며 많은 치아 연삭이있었습니다. 그 역사를 재현하지 마십시오 ...

경고 2 : 경고 2 : 암호화를 사용하면 보안에 대해 걱정하고 있습니다. 시스템을 공격 할 때 불리한 요소가있을 수 있습니다. 대부분의 경우 단순한 암호화로는 완전히 차단되지 않습니다. (올바르게 적용된) 암호화는 수동 공격자 인 만 패배 시키지만 전송 된 바이트를 관찰하지만 변경하지는 않습니다. 일반 공격자는 활성이기도합니다. 즉, 그는 일부 데이터 바이트를 제거하고 다른 데이터를 이동 및 복제하거나 자신의 설계에 여분의 바이트를 추가합니다.암호화 이상의 기능을 필요로하는 활동적인 공격자를 물리 칠려면 무결성 검사가 필요합니다. 다시 SSL과 CMS와 같은 프로토콜이 이미 세부 사항을 관리합니다.

+0

아주 좋은 설명 –

0

분명히 성능은 데이터의 모든 부분이 암호화되어야함에 따라 데이터의 양에 달려 있습니다. 특정 환경 (언어, 플랫폼, 암호화 알고리즘 구현)에서 테스트를 수행하면 훨씬 좋은 정보를 얻을 수 있습니다. 여기에있는 사람들은 파란색으로 제공 할 수 있습니다. 설정하는 데 30 분 이상 걸릴 것이라고는 생각하지 않습니다. 기본 성능 측정을 향상시킵니다.

보안과 관련하여 Triple DES 또는 AES으로 정상적으로 처리되어야합니다.

1

대칭 암호화 알고리즘은 일반적으로 블록 암호입니다. 주어진 알고리즘에 대해 블록 크기는 고정되어 있습니다. 그런 다음 이전 블록 (예 : 암호화 블록 체인)에 종속적 인 후속 블록을 만드는 여러 가지 다른 방법을 선택하여 스트림 암호를 만듭니다. 그러나 스트림 암호는 항상 들어오는 데이터를 캐시하고 전체 블록으로 블록 암호에 제출합니다.

그래서 50 바이트를 20 번 수행하면 캐시 논리에서 모두 작업을 수행하게됩니다.

스트림 모드에서 작동하지 않는 경우 공격자가 고려해야 할 메시지가 적기 때문에 암호의 기본 블록 크기보다 작은 데이터 그램은 완전한 블록보다 훨씬 적은 보호를 받게됩니다.

+0

데이터 배치 크기와 암호 블록 크기 간의 관계를 지적하기 위해 +1. – ojrac

3

AES가 좋은 선택입니다.

AES (예 : openssl 라이브러리에 포함 된 것)를 잘 구현하려면 암호화 할 때마다 바이트 당 약 10-20 CPU주기가 필요합니다. 작은 메시지를 암호화 할 때는 키 설정을위한 시간도 고려해야합니다. 예를 들어, DES의 전형적인 구현은 키 설정을 위해 수천 사이클을 요구한다. 즉, 다른 암호로 암호화를 시작하기 전에 실제로 AES로 작은 메시지를 암호화 할 수 있습니다.

최신 프로세서 (예 : Westmere 기반 CPU)에는 AES를 지원하는 명령어 세트가있어 바이트 당 1.5-4 사이클의 속도로 암호화 할 수 있습니다. 다른 암호로는 이길 수가 거의 없습니다.

가능하면 긴 메시지를 암호화하고 작은 조각으로 분할하십시오. 주된 이유는 암호화 속도가 아니라 보안입니다. 즉, 보안 암호화 모드는 일반적으로 초기화 벡터와 메시지 인증 (MAC)을 사용해야합니다. 각 암호문 부분에 약 32 바이트가 추가됩니다. 나는. 메시지를 작은 부분으로 나누면이 오버 헤드가 중요해질 것입니다.