대칭 암호화 알고리즘의 성능은 암호화되는 데이터의 양에 따라 좌우됩니까? 네트워크를 통해 빠르게 전송해야하는 약 1000 바이트가 있다고 가정하면 한 번에 50 바이트의 데이터를 20 번 또는 1000 바이트를 암호화하는 것이 더 좋습니다. 어느 것이 더 빠를 것인가? 그것은 사용 된 알고리즘에 달려 있습니까? 그렇다면 512 바이트 미만의 데이터 양에 대해 가장 성능이 뛰어나고 안전한 알고리즘은 무엇입니까?대칭 암호화 : 성능 질문
답변
짧은 대답은 다음과 같습니다
당신은 한 번에 모든 데이터를 암호화 할 수 있습니다. 실제로 암호화 코드에 대한 하나의 함수 호출로 모든 것을 제공하여 더 빨리 실행할 수 있습니다.
적절한 암호화 알고리즘을 사용하면 암호화가 네트워크 자체보다 훨씬 빠릅니다. 암호화가 병목 현상을 일으키기 위해서는 매우 나쁜 구현, 매우 오래된 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와 같은 프로토콜이 이미 세부 사항을 관리합니다.
분명히 성능은 데이터의 모든 부분이 암호화되어야함에 따라 데이터의 양에 달려 있습니다. 특정 환경 (언어, 플랫폼, 암호화 알고리즘 구현)에서 테스트를 수행하면 훨씬 좋은 정보를 얻을 수 있습니다. 여기에있는 사람들은 파란색으로 제공 할 수 있습니다. 설정하는 데 30 분 이상 걸릴 것이라고는 생각하지 않습니다. 기본 성능 측정을 향상시킵니다.
보안과 관련하여 Triple DES 또는 AES으로 정상적으로 처리되어야합니다.
대칭 암호화 알고리즘은 일반적으로 블록 암호입니다. 주어진 알고리즘에 대해 블록 크기는 고정되어 있습니다. 그런 다음 이전 블록 (예 : 암호화 블록 체인)에 종속적 인 후속 블록을 만드는 여러 가지 다른 방법을 선택하여 스트림 암호를 만듭니다. 그러나 스트림 암호는 항상 들어오는 데이터를 캐시하고 전체 블록으로 블록 암호에 제출합니다.
그래서 50 바이트를 20 번 수행하면 캐시 논리에서 모두 작업을 수행하게됩니다.
스트림 모드에서 작동하지 않는 경우 공격자가 고려해야 할 메시지가 적기 때문에 암호의 기본 블록 크기보다 작은 데이터 그램은 완전한 블록보다 훨씬 적은 보호를 받게됩니다.
데이터 배치 크기와 암호 블록 크기 간의 관계를 지적하기 위해 +1. – ojrac
AES가 좋은 선택입니다.
AES (예 : openssl 라이브러리에 포함 된 것)를 잘 구현하려면 암호화 할 때마다 바이트 당 약 10-20 CPU주기가 필요합니다. 작은 메시지를 암호화 할 때는 키 설정을위한 시간도 고려해야합니다. 예를 들어, DES의 전형적인 구현은 키 설정을 위해 수천 사이클을 요구한다. 즉, 다른 암호로 암호화를 시작하기 전에 실제로 AES로 작은 메시지를 암호화 할 수 있습니다.
최신 프로세서 (예 : Westmere 기반 CPU)에는 AES를 지원하는 명령어 세트가있어 바이트 당 1.5-4 사이클의 속도로 암호화 할 수 있습니다. 다른 암호로는 이길 수가 거의 없습니다.
가능하면 긴 메시지를 암호화하고 작은 조각으로 분할하십시오. 주된 이유는 암호화 속도가 아니라 보안입니다. 즉, 보안 암호화 모드는 일반적으로 초기화 벡터와 메시지 인증 (MAC)을 사용해야합니다. 각 암호문 부분에 약 32 바이트가 추가됩니다. 나는. 메시지를 작은 부분으로 나누면이 오버 헤드가 중요해질 것입니다.
- 1. SQL Server 2008의 대칭 암호화
- 2. 성능 저하없이 자바 스크립트를 사용하여 암호화
- 3. 질문, 암호화
- 4. pki와 대칭 암호화의 성능 차이는 무엇입니까?
- 5. SQL 기반 암호화 성능
- 6. 대칭 (생산) 대칭?
- 7. C# connectionString 암호화 질문
- 8. 데이터베이스 암호화 질문
- 9. 대칭 및 비대칭 암호화에 권장되는 C 암호화 프레임 워크는 무엇입니까?
- 10. 응용 프로그램 클러스터의 데이터 암호화
- 11. 암호화 알고리즘에 내부 해싱 알고리즘이 필요합니까? 나는 AES 대칭 암호화 암호를 구현하는 C# .NET을 사용하는 경우
- 12. 자바 스크립트 성능 질문
- 13. 성능 질문 : EF4.1
- 14. 성능 튜닝에 대한 질문
- 15. 메모리/성능 거래 질문?
- 16. 자바 필터 성능 질문
- 17. 자바 프로그램의 성능 질문
- 18. 성능 질문 : Entity Framework
- 19. 브라우저 성능 질문
- 20. 사실입니까? 성능 질문
- 21. JQuery ASP.Net 성능 질문
- 22. 구성 파일 성능 질문
- 23. MongoDB : 퍼블리싱 성능 질문
- 24. OpenGL 저수준 성능 질문
- 25. 성능 질문 sql
- 26. silverlight 수학 성능 질문
- 27. 간단한 mysql 성능 질문
- 28. MySQL의 성능 질문
- 29. C++ 컨테이너 성능 질문
- 30. WinForms 성능 질문
아주 좋은 설명 –