Como Utilizar a Extensão Sodium PHP no ServBay
O ServBay, como um poderoso ambiente integrado de desenvolvimento web local, vem com a extensão Sodium PHP pré-configurada e ativada por padrão. O Sodium é uma biblioteca de criptografia moderna e fácil de usar, amplamente adotada para proteção de dados e comunicação segura. Com o ServBay, desenvolvedores podem usar a extensão Sodium em seus aplicativos PHP para criptografar e descriptografar dados sem necessidade de compilar ou configurar manualmente, garantindo a segurança dos seus projetos.
Introdução à Extensão Sodium
Sodium (libsodium) é uma biblioteca de criptografia moderna projetada para fornecer funções criptográficas simples, fáceis de usar e altamente seguras. Ela suporta vários algoritmos e operações, como criptografia simétrica, criptografia assimétrica, assinaturas digitais, hashing, troca de chaves, entre outros. Desde o PHP 7.2, a biblioteca Sodium faz parte do núcleo do PHP como uma extensão principal, sendo a alternativa moderna e mais segura ao obsoleto mcrypt.
Principais Características
- Fácil de utilizar: Oferece uma API simples e intuitiva, facilitando a implementação de criptografia e descriptografia.
- Alta segurança: Utiliza algoritmos criptográficos modernos e as melhores práticas para proteção de dados.
- Multifuncionalidade: Suporta criptografia simétrica, assimétrica, assinaturas digitais, hashing, troca de chaves e mais.
- Multiplataforma: Pode ser utilizada em diferentes sistemas operacionais e linguagens de programação.
- Alto desempenho: Operações de criptografia e descriptografia eficientes, adequadas para aplicações que exigem performance.
Sodium como Alternativa ao mcrypt
A biblioteca mcrypt foi amplamente utilizada no PHP para criptografia, mas deixou de ser mantida e apresenta potenciais vulnerabilidades de segurança. Ela foi depreciada no PHP 7.1 e removida na versão 7.2. O Sodium foi introduzido como substituto moderno e seguro. Ele provê melhor segurança, é mais simples de usar e entrega desempenho superior. Por isso, recomenda-se fortemente seu uso em novos projetos para criptografia e descriptografia de dados, no lugar do mcrypt.
Disponibilidade e Ativação do Sodium no ServBay
O ServBay compila e ativa por padrão a extensão Sodium para todas as versões PHP 7.2 e superiores incluídas. Isso significa que, como usuário do ServBay, você não precisa instalar ou configurar a extensão manualmente. Basta iniciar o ServBay, selecionar a versão PHP desejada e as funções do Sodium estarão disponíveis imediatamente em seu código.
Para verificar se o Sodium está ativo, utilize o recurso phpinfo() do ServBay. Na interface do ServBay, selecione a versão do PHP em uso, localize a opção phpinfo()
e, na página exibida, busque por 'sodium'. As informações do módulo serão exibidas se a extensão estiver habilitada.
Utilizando a Extensão Sodium no Código PHP
Com a extensão habilitada, você pode acessar todas as funções do Sodium diretamente em seus projetos PHP. Salve seu arquivo PHP no diretório raiz do site no ServBay (por padrão /Applications/ServBay/www
) dentro do subdiretório apropriado, e acesse via navegador para executar. Veja abaixo exemplos básicos de uso:
Exemplo de Código (Criptografia Simétrica)
Na criptografia simétrica, o mesmo segredo é utilizado para encriptar e desencriptar os dados.
php
<?php
// Mensagem a ser criptografada
$message = "This is a secret message from servbay.demo";
// Gerar uma chave secreta aleatória (comprimento fixo: SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Gerar um Nonce aleatório (deve ser o mesmo durante a criptografia e a descriptografia)
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Criptografar a mensagem com a chave e o Nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Mensagem original: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // O Nonce normalmente deve ser armazenado/enviado junto com o ciphertext
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Processo de Descriptografia ---
// Suponha que já possuímos o ciphertext, o Nonce e a chave secreta
$retrieved_ciphertext = $ciphertext; // Obtido via armazenamento ou transmissão
$retrieved_nonce = $nonce; // Obtido via armazenamento ou transmissão
$retrieved_key = $key; // Obtido via armazenamento ou transmissão
// Descriptografar usando a chave e o Nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Verificar se a descriptografia foi bem-sucedida
if ($decrypted === false) {
echo "Falha na descriptografia!\n";
} else {
echo "Mensagem descriptografada: " . $decrypted . "\n";
}
// Limpar dados sensíveis da memória para evitar vazamentos
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Exemplo de Código (Criptografia Assimétrica)
Na criptografia assimétrica, um par de chaves é utilizado: chave pública para criptografar e chave privada para descriptografar.
php
<?php
// Mensagem a ser criptografada
$message = "This is another secret message for servbay-demo user";
// Gerar par de chaves (chave pública para criptografia, chave privada para descriptografia)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // Compartilhe com o destinatário
$secretKey = sodium_crypto_box_secretkey($keypair); // Mantenha em segurança, nunca compartilhe
echo "Chave pública (Base64): " . base64_encode($publicKey) . "\n";
echo "Chave privada (Base64): [Chave privada sensível, não deve ser exibida ou compartilhada]\n\n";
// --- Processo de Criptografia (usando a chave pública do destinatário) ---
// Suponha que o remetente possua a $publicKey do destinatário
// Gerar um Nonce aleatório (deve ser o mesmo durante a criptografia e a descriptografia)
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Usar a chave pública do destinatário e a chave privada do remetente
// Observação: na prática, deveria ser chave privada do remetente + chave pública do destinatário
// A função crypto_box do Sodium utiliza Diffie-Hellman Curve25519 na troca de chaves: é necessário o par chave pública/privada de ambos
// Neste exemplo simplificado, supomos que ambos pertencem ao mesmo usuário, criptografando e descriptografando localmente
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Aqui, o keypair reúne as chaves
echo "Mensagem original: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // O Nonce deve ser armazenado/enviado junto com o ciphertext
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Processo de Descriptografia (usando a chave privada do destinatário) ---
// Suponha que o destinatário possua o ciphertext, Nonce, sua chave privada ($secretKey) e a chave pública do remetente ($publicKey)
// Neste exemplo simplificado, usamos novamente o $keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Utiliza o keypair (com a chave privada) para descriptografar
// Descriptografar usando o par de chaves
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Verificar se a descriptografia foi bem-sucedida
if ($decrypted === false) {
echo "Falha na descriptografia!\n";
} else {
echo "Mensagem descriptografada: " . $decrypted . "\n";
}
// Limpar dados sensíveis
sodium_memzero($secretKey); // Limpar a chave privada
sodium_memzero($keypair); // Limpar o par de chaves
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Exemplo de Código (Assinatura Digital)
A assinatura digital é usada para verificar a integridade da mensagem e a identidade do remetente. A chave privada assina, e a chave pública verifica a assinatura.
php
<?php
// Mensagem a ser assinada
$message = "This message needs to be signed by servbay.demo";
// Gerar par de chaves para assinatura (chave privada para assinar, pública para verificar)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // Compartilhe com quem irá verificar
$secretKey = sodium_crypto_sign_secretkey($keypair); // Mantenha em segurança, nunca compartilhe
echo "Chave pública (Base64): " . base64_encode($publicKey) . "\n";
echo "Chave privada (Base64): [Chave privada sensível, não deve ser exibida ou compartilhada]\n\n";
// --- Processo de Assinatura (usando a chave privada do remetente) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Mensagem original: " . $message . "\n";
echo "Assinatura (Base64): " . base64_encode($signature) . "\n\n";
// --- Processo de Verificação (usando a chave pública do remetente) ---
// Suponha que quem irá verificar possui a mensagem, a assinatura e a chave pública do remetente ($publicKey)
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Verificar a assinatura usando a chave pública
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Assinatura válida! A mensagem não foi alterada e provém realmente do detentor da chave privada.\n";
} else {
echo "Assinatura inválida! A mensagem pode ter sido alterada ou não foi assinada pela chave correta.\n";
}
// Limpar dados sensíveis
sodium_memzero($secretKey); // Limpar a chave privada
sodium_memzero($keypair); // Limpar o par de chaves
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Resumo
Com o ServBay, desenvolvedores podem usar facilmente a extensão Sodium PHP pré-instalada e ativada por padrão, eliminando a necessidade de instalação e configuração manuais no ambiente local. Assim, você pode focar em utilizar os avançados recursos criptográficos do Sodium para proteger suas aplicações. O Sodium, como alternativa moderna ao mcrypt, é indispensável para construir aplicações web seguras e confiáveis. O ServBay simplifica esse processo, apoiando os desenvolvedores na criação de ambientes locais eficientes e seguros.