2014-06-05 2 views
1

PHP의 openssl_sign 메서드를 SHA512 (또는 다른 SHA2 제품군 구성원)와 함께 사용할 수 있습니까?PHP openssl_sign with SHA512

나는 키 유형 (OPENSSL_KEYTYPE_RSA)으로 RSA를 사용하고

openssl_sign($data, $signature, $privatekey, 'sha512'); 

모든 것이 잘 작동을 통해 서명합니다.

그러나 OPENSSL_KEYTYPE_DSA를 사용할 때 서명은 비어 있습니다. 나는이 발견되는 OpenSSL help page에서

". 그런 다음 DSA 알고리즘을 사용하여 데이터를 서명하거나 확인하고자하는 경우 사용되어야한다 소화 DSS1" 는

그래서 나는 DSA와 함께이 시도 :

openssl_sign($data, $signature, $privatekey, 'dss1'); 

그리고 제대로 작동했습니다.

DSA를 사용하는 편이 좋기 때문에 사용 사례에 더 적합한 짧은 서명이 만들어집니다. 그러나 내 관심사는 DSS1이 기본적으로 더 이상 사용되지 않아야하는 SHA1이라는 것입니다. 이것은 DSA와의 조합에도 유효합니까? 이 문제를 해결하고 DSA를 SHA512와 함께 사용하는 방법이 있습니까?

+0

어둠 속에서도 찌르지 만 SHA160을 사용할 수 있습니까? SHA1의 해시 길이와 일치하므로 호환성이 있지만 훨씬 안전합니다. – otus

+0

내 지식에는 SHA160과 같은 것이 없습니다. SHA-0 및 SHA-1은 160 비트 키를 사용합니다. – CodeX

+0

표준이 아니지만 일부 라이브러리는 SHA224와 같이 160 비트로 잘린 SHA256을 제공하지만 더 짧습니다. DSA로 전달할 방법이 있다면 잘라내기를 할 수 있습니다. – otus

답변

1

정말 답이 아니라 주석으로 읽을 수있는 것 이상입니다.

OpenSSL 맨 페이지 노트가 구식임을 유의하십시오 (참고). OpenSSL 0.9.8은 "dbst"명령을 사용하는 "EVP"API를 사용하여 해시와 PKalg를 함께 선택했기 때문에 SHA1 (DSA1이라는 원래 접미어 FIPS로 지정)과 DSA 만 수행 할 수있었습니다. 당신이 찾았습니다). 또한 하위 그룹 (q) 크기 160의 DSA 매개 변수를 생성 할 수 있지만 FIPS가 512에서 1k까지 64 단계 (1995 년과 같이 좋음) 였음에도 불구하고 그룹 (p) 크기> 1k를 수행 할 수있었습니다. .

개선 된 API가있는 새로운 &의 1.0.0 및 1.0.1에서는 모든 FIPS186-3 매개 변수 크기 (1k/160, 2k/224, 2k/256,3k/256)를 생성하고 모든 DSA의 서명/제 4의 원래 SHA-2 해시 중 하나를 사용하면 q (하위 그룹)보다 긴 해시가 FIPS 당 잘리고 따라서 기본적으로 낭비됩니다. (IIRC FIPS180-4에 추가 된 3 개의 SHA-2 "슬래시"변종은 OpenSSL에서 아직 해시로 구현되지 않았습니다.

분명히 알 수 있듯이 0.9.8부터 OpenSSL은 RSA (나는 꽤 확신한다.) MD2에서 SHA512까지의 모든 해시들. 그러나 SHA512는 Schneier의 마일 높이 지분과 같습니다. RSA가 NIST와 ECRYPT (www.keylength.com 참조)에 따라 15 킬로 비트 이상을 필요로하며 명목상의 힘을 유지하기 위해서는 그럴 것입니다.

ECDSA는 똑같이 작은 시그니처 값을 생성하며 현재 또는 더 빨리 원하는 높은 수준에서 더 나은 확장이 기대됩니다.

PHP에서 언제, 어떻게 사용 가능한지 알고 있습니다.

그리고 항상 하나 이상의 다른 시스템과 상호 운용하는 경우 암호 기능을 확인하십시오.

(참고) 지난 달 (기침, 기침) 흥분을 감안할 때 OpenSSL을 사용하는 사람들의 수가 급격히 증가했으며 일부는 수년간 지연 되어온 문서 및 테스트와 같은 지루한 비트를 처리하기 때문에, 이것에 대한 수정 요청에서.

+0

이 주제에 대한 배경 정보를 공유해 주셔서 감사합니다. 나는 당신에게 upvote를 줬다. 그러나 당신이 벌써 언급했던 것에 따라 그것은 정말로 나의 질문에 대한 대답이 아니다. :) – CodeX