문제

C ++ 프로그램에서 사용할 빠른 비대칭 사이퍼 알고리즘을 찾고 있습니다. 우리의 응용 프로그램은 아카이브에 저장된 읽기 전용 데이터 (TAR과 다소 유사한 사용자 정의 형식)에 액세스하며, Archive Index를 비대칭 적으로 암호화하여 해당 아카이브의 수정을 방지하려고합니다 (이것이 완벽한 솔루션이 아니라는 것을 알고 있습니다. 특정 기술을 사용하여 데이터를 여전히 추출하고 재 포장 할 수 있습니다).

약간 아카이브 내의 개별 파일은 대칭 사이퍼로 암호화되며 암호화 키는 아카이브 인덱스 (헤더) 내에 저장됩니다. 그렇기 때문에 아카이브 헤더를 비대칭 적으로 암호화하려는 이유입니다.

사이퍼 요구 사항 :
1) 알고리즘 구현은 플랫폼 독립적이어야합니다.
2) 알고리즘은 직접 구현하기 쉽거나 라이브러리 (소스 코드 포함)에서 사용할 수 있어야합니다. 공전 독점 응용 프로그램과 연결하면 GPL/LGPL/바이러스 라이센스를 사용할 수 없습니다. MIT/BSD 라이센스 코드 또는 공개 도메인 코드가 허용됩니다.
3) Cypher가 라이브러리에서 사용할 수있는 경우 이상적으로는 작은 메모리 발자국이 있어야하며 구현은 작아야합니다. 본격적인 다목적 암호 컬렉션 대신 한 암호를 구현하는 C/C ++ 라이브러리를 사용하는 것이 좋습니다.

원래 RSA를 사용하고 싶었지만 유용하기에는 너무 느리기 때문에 대안이 많지 않은 것 같습니다.

그래서 무엇을 사용할 수 있는지에 대한 조언이 있습니까?

도움이 되었습니까?

해결책

좋아, 내가 찾고 있던 것을 발견했는데, 그것이 OpenSSL보다 낫다고 생각합니다 (적어도 내 목적을 위해).

두 가지 라이브러리가 있습니다.
libtomcrypt, 여러 사이퍼 (RSA 포함)를 구현하고 libtommath, 그것은 Bignum 산술을 구현합니다. 두 라이브러리는 모두 공개 도메인에 있으며 OpenSSL보다 해킹/수정이 쉽고 더 간단한 프로그래밍 인터페이스를 가지고 있으며 OpenSSL보다 더 나은 문서화가 있습니다.
이전 공개 도메인 RSA 코드와 달리 이전에 찾은 것입니다, libtomcrypt는 새 키를 매우 빠르게 생성하고 OpenSSL 생성 키를 가져올 수 있으며 패딩을 지원할 수 있습니다. LibtomCrypt의 또 다른 좋은 점은 추가 종속성이 없다는 것입니다 (예 : Windows 용 OpenSSL은 GDI32를 원합니다). OpenSSL보다 작습니다.

나는 암호화에 RSA를 사용하기로 결정했습니다. 다른 암호 (Elgamal, 타원 곡선) 대부분은 세션 키가 비대칭 적으로 암호화되는 대칭 암호화에 더 적합한 것 같습니다. 나에게 적합하지 않습니다. 이러한 암호는 네트워크 통신/세션 키에 적합하지만 디스크의 정적 변하지 않는 데이터에 사용하는 것은 좋지 않습니다.

"RSA가 느리게"에 관해서는 아카이브 형식을 약간 변경 했으므로 이제 작은 데이터 덩어리 만 비대칭 적으로 암호화되고 있습니다. 이 청크를 해독하지 않으면 읽기 아카이브 색인이 불가능하지는 않더라도 완전히 어렵게 만듭니다. 또한, 나는 RSA의 속도가 부분적으로 주어진 잘못된 인상임을 인정해야합니다. 구형 코드 전에 사용하려고했습니다.

즉, 질문이 해결되었습니다. 솔루션은 RSA + libtomcrypt입니다. RSA- RSA 및 LibtomCrypt에 대한 대안이 많지 않기 때문에 작고 공개 도메인에 있기 때문입니다.

다른 팁

OpenSSL은 당신을 위해 일을해야합니다. 오픈 소스 (Apache 라이센스이므로 라이센스 요구 사항을 충족).

널리 사용되고 잘 테스트되었습니다.

사용자 정의 RSA를 사용하여 아카이브에 서명하십시오. 신청서에 공개 키를 저장하고 개인 키를 집 안에 보관하십시오. 이제 누구나 읽기 전용 아카이브를 수정할 수 있지만 응용 프로그램은 수정 된 아카이브로드를 거부합니다.

타원 곡선 Crytpography 인 Curve25519를 확인하십시오.

모든 요구 사항을 충족합니다. 여기를 봐.

이를 사용하여 암호화하거나 간단히 서명 할 수 있습니다.

참고 사항 : 참고 :

무결성 검사의 경우, 실제로 암호 암호화가 필요하지 않으면 Mac은 충분해야합니다.

MD5는 어떻습니까?

예, MD5가 깨 졌다는 것을 알고 있습니다. - 그러나 대부분의 실용적인 응용 분야는 관련이 없습니다.
특히 수정 된 데이터가 특정 데이터 형식에서 유효하고 올바른 MD5가있는 경우

편집하다:
MD5는 저장된 데이터를 변경할 수 없도록하려면 (또는 적어도 감지 할 수 있음) 데이터를 숨기지 않으려면 적절합니다. 데이터와 함께 앱에 키가 있어야하는 경우 언제든지 추출 할 수 있습니다. 키를 숨기는 기술이 있습니다. 인기있는 것은 단순히 쉽게 연결할 수있는 아이콘과 같은 정적 자원에 넣는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top