2016-06-27 2 views
0

중요한 데이터를 암호화하여 데이터베이스에 저장하려고합니다. 그리고 사용자가 양식을보고있을 때이 민감한 데이터를 볼 수있는 권한이 있으면 해당 세션의 데이터를 해독 할 수있는 추가 "비밀번호"를 갖게됩니다.공개 키 개인 키 암호화로 개인 문자열로 자신의 문자열을 만드시겠습니까?

공개 키/개인 키 암호화를 찾고 개인 키 (sha 해시 등) 및 해당 공개 키를 생성하기 위해 친숙한 암호를 사용했습니다. 공개 키는 입력 된 새로운 중요한 데이터를 암호화하는 데 사용됩니다. 그리고 사용자가 데이터를 볼 필요가있는 경우 일반 로그인 계정 및 권한 설정 이외에도 암호 ("개인 키")를 입력합니다. 또한 개인 키/암호가 모든 서버에 저장되는 것을 방지합니다.

그냥 개인 키가 작동하지 않는 한 어떤 임의의 문자열을 사용 : 현재 사용자에 따라서

-----BEGIN PRIVATE KEY----- 
sha_hash('myPassword'.$salt) 
-----END PRIVATE KEY----- 

해독하라는 메시지로 개인 키 텍스트를 붙여 넣습니다 (OpenSSL을 등을 통해 만든)을 복사해야 정보. 이것은 사람들이이 키를 파일이나 이메일에 저장하는 것을 의미합니다.

이렇게 할 수 있나요? 내 개인 키 문자열을 만든 다음 공개 키를 만듭니다.

+0

사용자 (또는 클라이언트)가 개인 키를 어디에서나 전송하는 경우 공개 개인 키 암호화 사용 목적을 상실합니다. 이 문제에 대한 최선의 해결책이라고 확신합니까? – apokryfos

+0

이 문제는 간단한 대답이 없습니다. http://security.stackexchange.com/에서 사용할 알고리즘에 대한 도움을 요청하십시오. 암호에서 비밀 키를 가져오고 암호 알고리즘과 함께 사용하려면 KeyDerivationFunction이 필요합니다. 암호화 및 해독 할 키 쌍 (public/private)을 생성하는 것은 다른 경우입니다. – pedrofb

+0

이 내용은 [여기] (http://crypto.stackexchange.com/q/1662/13022)에서 논의됩니다. 가능하지만 RSA에 대한 결정 론적 프라임 검색을 지원하는 PHP 라이브러리에 대해서는 잘 모릅니다. phpseclib 소스 코드를 가져 와서 결정적으로 편집 할 수 있습니다. –

답변

1

이렇게 할 수 있나요? 내 개인 키 문자열을 만든 다음 공개 키를 만듭니다.

예, 추상화가 가능합니다. 아니요, 소수를 요구하는 RSA에서는 사소하지 않습니다.

$salt = random_bytes(16); // Do this once, then make it a constant 
$keyPair = KeyFactory::deriveEncryptionKeyPair(
    "My password", 
    $salt, 
    false, // This isn't a legacy key 
    KeyFactory::SENSITIVE 
); 
$privateKey = $keyPair->getSecretKey(); 
$publicKey = $keyPair->getPublicKey(); 

var_dump(bin2hex($privateKey->getRawKeyMaterial())); 
var_dump(bin2hex($publicKey->getRawKeyMaterial())); 

출력 예 :

string(64) "030d6e4c462b2d15a48441cead4d1b9d0ae4a2ea6926a78e180a8b7d3ce6508f" 
string(64) "189c86722bc81550186fd0eaba2a97d2e6c0a9c6f63a098cc1495309c7f9a71e" 

이들은 libsodium 의해 제공 Curve25519 위에 ECDH 키이다 (RSA를 사용 RSA없이 나을하지 않음) Halite에서

예.