Algorytmy szyfrujące z kluczem publicznym na podstawie lib sodium

0

Dzień dobry.

Czy ktoś z Was używał już https://github.com/paragonie/sodium_compat ?
W przykładzie użycia jest tam kod:

<?php
require_once "/path/to/sodium_compat/autoload.php";

$alice_kp = sodium_crypto_sign_keypair();
$alice_sk = sodium_crypto_sign_secretkey($alice_kp);
$alice_pk = sodium_crypto_sign_publickey($alice_kp);

$message = 'This is a test message.';
$signature = sodium_crypto_sign_detached($message, $alice_sk);
if (sodium_crypto_sign_verify_detached($signature, $message, $alice_pk)) {
    echo 'OK', PHP_EOL;
} else {
    throw new Exception('Invalid signature');
}

Jednak nie rozumiem, na jakiej podstawie przypisywany jest klucz. Po prostu losowo? Czyli czy to znaczy, że muszę wygenerować losowo klucze i je gdzieś zapisać, jeżeli chcę ich używać wielokrotnie do szyfrowania?

Dzięki
M.

0

W bibliotece jest używana m.in. taka funkcja do generowania kluczy:

    public static function keypair()
    {
        $seed = random_bytes(self::SEED_BYTES);
        $pk = '';
        $sk = '';
        self::seed_keypair($pk, $sk, $seed);
        return $sk . $pk;
    }

Więc tak, klucz jest generowany losowo i jeśli chcesz go używać wielokrotnie to musisz go gdzieś zapisać.

0

OK. Zaszła pewna nieścisłość w mojej wiadomości. Przytoczony przeze mnie przykład, zaczerpnięty z githuba libki, służy weryfikacji czy wiadomość jest oryginalna, czy została zmieniona. Do szyfrowania, z możliwością deszyfrowania, używa się innych funkcji, np:

$encrypted_text = sodium_crypto_aead_aes256gcm_encrypt($message, NULL, $nonce, $key);
$decrypted_text = sodium_crypto_aead_aes256gcm_decrypt($encrypted_text, NULL, $nonce, $key);

W dokumentacji piszą, żeby $nonce była używana tylko raz. Czy to warunek bezwzględny?
https://www.php.net/manual/en/function.sodium-crypto-aead-aes256gcm-encrypt.php
https://www.php.net/manual/en/function.sodium-crypto-aead-aes256gcm-decrypt.php

W sumie to ja tylko chcę ID do bazy zakodować, nawet jak ktoś je rozkoduje to niewiele mu to da poza tym, że będzie widzieć to samo co widzi na stronie :P

0

Co masz na myśli przez "zakodować ID"? Wydaje mi się, że wyciągasz czołgi na coś, co nie wymaga takiego wysiłku. Może po prostu potrzebujesz jakiś UUID?

Np:
https://github.com/ramsey/uuid
https://hashids.org/

0
W dokumentacji piszą, żeby $nonce była używana tylko raz. Czy to warunek bezwzględny?

https://www.google.com/search?client=firefox-b-d&q=nonce+reuse+attack

0

https://github.com/ramsey/uuid jak tego użyć? Piszą, żeby wpisać composer require ramsey/uuid https://uuid.ramsey.dev/en/stable/quickstart.html ale mi sypie

file_put_contents(/home/michal/.cache/composer/repo/https---repo.packagist.  
  org/provider-ramsey~uuid.json): failed to open stream: Permission denied

Piszą, żeby nie instalować jako root. Nie wiem jak tego użyć, do tej pory używałem tylko libek przez pobranie źródeł i odwołanie do nich. Pobrałem źródło, ale nie wiem jak zaintsalować.

Proszę o pomoc
Dzięki
M.

0

Ale po co ty chcesz w ogóle hashować cokolwiek?

Chcesz zrobię po prostu sprawdzić jak się robi takie rzeczy? Bo jeśli próbujesz zrobić coś sensownego, to to co opisujesz trochę nie ma sensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1