0
libsodium
이라는 암호로 공개 키/비밀 키 쌍을 결정적으로 생성하고 싶습니다. 사용자가 암호 구문을 입력 할 때마다 언제나 동일한 키 쌍을 가져옵니다.libsodium의 암호문에서 키 쌍 생성하기
#include <assert.h>
#include <string.h>
#include <sodium.h>
int main (void) {
char passphrase[1024];
printf("ENTER PASSPHRASE: ");
{
char* ret = fgets(passphrase, sizeof(passphrase), stdin);
assert(ret != NULL);
assert(passphrase[strlen(passphrase)-1] == '\n');
passphrase[strlen(passphrase)-1] = '\0';
}
unsigned char hash[crypto_generichash_BYTES];
{
int ret = crypto_generichash(hash, crypto_generichash_BYTES,
(unsigned char*)passphrase, strlen(passphrase),
NULL, 0);
assert(ret == 0);
}
unsigned char pk[crypto_sign_PUBLICKEYBYTES];
unsigned char sk[crypto_sign_SECRETKEYBYTES];
{
assert(crypto_generichash_BYTES == crypto_sign_SEEDBYTES);
int ret = crypto_sign_seed_keypair(pk, sk, hash);
assert(ret == 0);
}
printf("PUBLIC KEY:\n");
for (int i=0; i<crypto_sign_PUBLICKEYBYTES; i++) {
printf("%02X ", pk[i]);
}
printf("\n");
printf("PRIVATE KEY:\n");
for (int i=0; i<crypto_sign_SECRETKEYBYTES; i++) {
printf("%02X ", sk[i]);
}
printf("\n");
return 0;
}
를 암호가 강한 가정 할 때,이 제도입니다 :
내 접근 방식 (예를 들어, fgets
가), crypto_sign_seed_keypair
에 씨앗으로 해시를 사용하여 다음 crypto_generichash
로 해시, 어떻게 든 암호를 획득하는 것입니다 안전하고 실용적인?
내 경우에는 사용자가 소금을 찾을 수 없으므로 고정 값을 사용해야합니까? (해시/소금은 아무 곳에도 저장되지 않습니다.) 일반 해시보다 여전히 훨씬 좋은가요? – fsantanna
고정 된 소금이 좋습니다. 응용 프로그램에 고유 한 것으로 설정할 수 있습니다. –