Ferramenta gratuita de privacidade

Encriptar um ficheiro no seu navegador

Escolha um ficheiro, escolha uma frase-passe e descarregue uma cópia encriptada. AES-256-GCM, com a chave derivada no seu navegador. Nada é enviado, e funciona offline depois de carregado. O formato está documentado byte a byte mais abaixo, para não ter de acreditar na nossa palavra.

Corre inteiramente neste separador. Nada é enviado, e funciona offline depois de carregado.

Qualquer ficheiro. Ficheiros grandes precisam de memória. Veja os limites honestos abaixo.

Não há recuperação. Uma frase-passe esquecida significa um ficheiro que ninguém, nós incluídos, alguma vez conseguirá abrir.

Todos os parâmetros, declarados

Cifra
AES-256-GCM (WebCrypto), etiqueta de 128 bits
Derivação da chave
PBKDF2-HMAC-SHA-256, 600,000 iterações
Sal do KDF
16 bytes, CSPRNG, novo em cada ficheiro
Nonce GCM
12 bytes, CSPRNG, novo em cada ficheiro
Dados autenticados
todo o cabeçalho de 42 bytes, por isso adulterar qualquer parâmetro declarado quebra a desencriptação
Codificação da frase-passe
UTF-8, normalizada em NFC (para que a mesma frase escrita em qualquer dispositivo derive a mesma chave)

Limites honestos

Este não é o formato de cofre da app Sealby. A app deriva as chaves com Argon2id calibrado por dispositivo, envolve-as no Secure Enclave e guarda o conteúdo em contentores negáveis divididos em blocos. Nada disso uma página web consegue fazer. Esta página é um utilitário independente, construído sobre o que os navegadores oferecem nativamente.

O PBKDF2 não tem custo em memória. É a única função de derivação de chave que os navegadores trazem nativamente, e 600,000 iterações tornam cada tentativa lenta, mas uma máquina com GPU continua a atacá-lo muito mais depressa do que ao Argon2id. Por isso, a proteção vive na sua frase-passe: quatro palavras aleatórias ou mais, não uma palavra-passe.

A WebCrypto encripta numa só passagem. Não há streaming, por isso o ficheiro inteiro fica em memória duas a três vezes durante o processamento. Centenas de megabytes não são problema na maioria dos dispositivos. Para arquivos de vários gigabytes, use uma ferramenta de computador. O resultado encriptado também revela o tamanho aproximado do ficheiro. O nome vai encriptado lá dentro, mas o tamanho não fica escondido.

O formato, byte a byte

Tudo o que um leitor técnico precisa para verificar de forma independente o resultado desta página, ou para o desencriptar em vinte linhas de Python:

bytesfieldcontents
0–7magicASCII "SBXF0001"
8versão0x01
9algoritmo0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256
10–13iteraçõesuint32, big-endian (600,000)
14–29sal16 bytes
30–41nonce12 bytes
42–fimtexto cifradoAES-256-GCM do conteúdo, AAD = bytes 0–41; os últimos 16 bytes são a etiqueta GCM

Conteúdo antes da encriptação: [comprimento do nome em 2 bytes, big-endian][nome do ficheiro, UTF-8][bytes do ficheiro]. O nome original viaja encriptado; ao desencriptar, é restaurado.

Desencriptador de referência (Python, biblioteca cryptography)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0]          # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42])     # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)

Isto é a demonstração. O cofre é o produto.

Um ficheiro, uma frase-passe, uma página. É isso que um navegador consegue fazer. O Sealby fá-lo como deve ser: Argon2id calibrado para o seu dispositivo, chaves no Secure Enclave e cofres ocultos, sem lista nem contagem guardada.

Descarregar na App Store

iPhone e iPad · iOS 17+ · Grátis