문제

회사에서 민감한 데이터를 암호화하기 위해 PHP McRypt 모듈을 사용하고 있습니다. 이것은 잘 작동했습니다. 그러나 모든 데이터를 해독 할 수있는 새 마스터 비밀번호를 작성하도록 요청 받았습니다. 문제는이 마스터 비밀번호가 스크립트 파일로 하드 코딩되어야한다는 것입니다. 내가 틀린 경우 저를 수정하십시오. 그러나 유일한 안전한 방법은 스크립트의 공개 키를 하드 코딩하고 개인 키를 안전하게 유지하는 동안 데이터를 암호화하는 데 사용하여 필요할 때만 해독하는 데 사용하는 것 같습니다.

McRypt는 그러한 계획에 대한 구현이없는 것 같습니다. 라이브러리 (PHP 모듈 또는 순수한 PHP)를 아는 사람이 있습니까?

도움이 되었습니까?

해결책

PHP OpenSSL 바인딩, 특히 Openssl_public_encrypt () 기능. 실제로 마스터 공개 키를 스크립트에 포함시키고 스크립트 가이 공개 키를 사용하여 각 사용자의 AES 키를 암호화 할 수 있습니다. 회사의 해당 마스터 개인 키를 안전하게 유지하십시오.

마스터 해독 기능이 필요한 경우 암호화 된 사용자 키를 가져와 마스터 개인 키로 해독 한 다음 원본 데이터를 해독합니다.

다른 팁

그것에 대한 pecl 확장이 있습니다. http://us2.php.net/manual/book.gnupg.php

매우 빠를 필요가 없다면 PHP의 GNUPG 명령 줄 도구를 사용할 수도 있습니다. http://devzone.zend.com/article/1265

나는 두 가지 방법 중 하나를 시도하지 않았습니다.

어떻게 작동하는지 모르겠습니다. 모든 양방향 암호화 기능은 암호화에 사용되는 특정 비밀번호를 공급할 때만 해독 될 것입니다 (NSA이고 알고리즘에 문을 다시 넣지 않는 한). 두 개의 암호가 동일한 파일을 해독 할 수는 없습니다 (해시 충돌이 없다면 쉽게 할 수있는 것은 아닙니다).

프로그램에 마스터 비밀번호를 저장하는 한 프로그램이 읽는 별도의 파일에 저장하는 것이 훨씬 좋습니다. 해당 파일에서 더 엄격한 OS 레벨 보안을 사용할 수 있습니다.

McRypt는 공개 키 암호화가 아닙니다. 공개 키 암호화를 통해 원하는 것을 할 수 있습니다. 예를 들어, PGP/GPG를 사용하면 서로의 개인 키를 모르고 개인 키를 사용하여 3 개의 다른 사용자가 해독 할 수 있도록 파일을 암호화 할 수 있습니다. 따라서 모든 것을 해독 할 수있는 마스터 비밀번호가있는 가상 사용자를 가질 수 있습니다.

또 다른 옵션은 모든 암호화 된 데이터의 두 사본을 보유하는 것입니다. 하나는 사용자의 암호로 암호화되고 하나는 마스터 비밀번호로 암호화되었습니다.

이것에 대한 당신의 요구 사항을 확인하기 위해 마스터 비밀번호,

  1. ''로만 사용될 것으로 예상됩니까?encrypt this'봉인 할'명령
    그렇다면 문제의 개인 키를 아는 누군가 만 열 수 있습니까? 또는,
    • 기업에서 수행 된 암호화를 열 예정입니까?
    • 나는 당신의 문구 가이 두 번째 방식으로 해석되지 않아야하는지 확인하고 싶습니다.
    • 당신의 문구 ''decrypt any data'위험한 소리
      (그리고 비대칭 키 암호화로 실용적이지 않은/실용)

주석을 기반으로 업데이트.

  • 당신은 계획하고 있습니다 데이터의 두 사본 각각 다른 키로 암호화되었습니다
    • 하나의 사본 The와 암호화되어야합니다 마스터 대중 열쇠
      • 누구나있는 사람과 해독 할 수 있습니다 마스터 개인 열쇠
        그런 다음 마스터 개인 키를 확보해야합니다 (공개 키는 중요하지 않음)
    • 그만큼 두 번째 사본 The와 암호화되어야합니다 Rijndael 256 열쇠
  • 목적은 마스터가 필요할 때마다 데이터를 해독 할 수 있도록하는 것입니다.
    특히 암호화 한 개인이 없을 때

이 접근법은 Rijndael 키를 사용하여 개인의 데이터에 쉽게 액세스 할 수 있습니다.
마스터 개인 키 소유자의 개입이 필요하지 않습니다.
그리고 마스터 개인 키 소유자가 데이터의 비밀을 신뢰할 때.

사용자가 사본을 업데이트 할 때마다 마스터 사본을 업데이트해야합니다 (이전 사본을 삭제하고 새 제품을 다시 암호화)해야합니다.


그러나 만약 사용자 데이터는 마스터로 신뢰됩니다 (분명히 여기에있는 것처럼),

  • 더 쉬운 접근 마스터로부터 Rijndael 키를 발행하는 것입니다.
  • 마스터는 마스터-공공 키 자체로 암호화 할 수 있습니다.
  • 그런 다음 발행 된 Rijndael 키로 데이터를 암호화 할 수 있습니다.
    • 마스터-프라이버시 키로 항상 액세스 할 수 있습니다
      사용자의 Rijndael 키를 열 수 있습니다

사용자가 데이터에 서명 해야하는 경우 프로세스에서 별도로 달성 할 수 있습니다.
더블 사본을 보관하고 유지하지 못하게합니다.


데이터에 서명합니다, 사용자는 AA 키 쌍을 생성 할 수 있습니다.

  • Rijndael Private-Key와 함께 데이터를 암호화하기 전에
  • 그만큼 마스터-공공 키 암호화 사용자-민간 키 그것에 추가 될 수 있습니다
  • 그만큼 사용자-공개 키 마스터와 공유 (적어도)
    사용자가 데이터를 제공했음을 인증하기에 충분합니다.
  • 최악의 시나리오에서 사용자를 사용할 수없고 주요 확인이 실패하면
    마스터는 데이터의 진위에 대해 신뢰할 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top