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:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | versão | 0x01 |
| 9 | algoritmo | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iterações | uint32, big-endian (600,000) |
| 14–29 | sal | 16 bytes |
| 30–41 | nonce | 12 bytes |
| 42–fim | texto cifrado | AES-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.
iPhone e iPad · iOS 17+ · Grátis