O projeto tem como objetivo praticar os conhecimentos de segurança em sistemas criando um gerenciador de envelopes digitais, para isso a aplicação fornece uma interface que irá criar e abrir esses envelopes. Em um arquivo de configuração são definidos o par de chaves RSA privada e pública do destinatário e o algoritmo simétrico que será utilizado na cifragem/decifragem do envelope.
Os envelopes digitais são uma técnica de segurança amplamente utilizada para proteger informações sensíveis durante o armazenamento, transmissão e acesso. Eles fornecem confidencialidade, autenticidade e integridade dos dados, garantindo que somente partes autorizadas possam acessar o conteúdo. Para isso a informação passará pelos processos de envelopamento no remetente e abertura no destinário. Nesse projeto vamos explorar esse mecanismo utilizando o algoritmo de chave assimétrica RSA e os algoritmos simétricos AES, DES ou RC4. A chave assimétrica será usada para criptografar a chave simétrica, que, por sua vez, será usada para criptografar o conteúdo do envelope.
- A mensagem em claro é convertida em uma representação binária.
- Uma chave simétrica temporária e aleatória é gerada para o algoritmo simétrico.
- O conteúdo é criptografado com o algoritmo simétrico utilizando a chave gerada.
- A chave simétrica temporária é cifrada utilizando a chave pública do destinatário.
- A chave simétrica é descriptografada utilizando a chave privada.
- A mensagem do envelope é decifrada utilizando a chave simétrica.
- Node Crypto Library
- Public Key Cryptography
- Key Encapsulation Mechanism
- Criptografia Moderna (Slides)
Antes de começar, verifique se você atendeu aos seguintes requisitos:
Para clonar, baixar as dependências e compilar o projeto, utilize os comandos:
git clone https://github.com/pumba-dev/data-security-envelop.git
cd data-security-envelop
npm run build
Para gerar um par de chaves pública e privada basta utilizar o comando abaixo:
npm run keygen
Este comando irá gerar dois arquivos (public_key.pem e private_key.pem) na pasta /rsa-keys localizada na raiz do projeto.
Para definir os algoritmos e chaves utilizados no envelope, atualize os dados no arquivo de configuração envelope-config.json
no diretório raiz do projeto. Sempre que alterar dados no arquivo de configuração, execute o comando npm run build
para compilar as alterações.
Params | Type | Default | Description |
---|---|---|---|
clearText |
String | clear-text | Nome do arquivo que contem o texto em claro para envelopamento. |
rsaPublicKey |
String | public_key | Nome do arquivo de chave pública utilizado para criptografia da chave simétrica. |
rsaPrivateKey |
String | private_key | Nome do arquivo de chave privada utilizado para criptografia da chave simétrica. |
simetricAlgorithm |
String | AES | Algoritmo simétrico utilizado para criptografia da mensagem (AES, DES ou RC4) |
envelopeKey |
String | encrypted_key | Nome do arquivo que contem a chave criptografada para abertura no remetente |
envelopeMessage |
String | encrypted_file | Nome do arquivo que contem a mensagem criptografada para abertura no remetente |
- Para adicionar um novo texto em claro para o envelopamento, basta criar ou alterar um arquivo .txt localizado na pasta /clear-texts na raiz do projeto. Por padrão, o algoritmo está configurado para ler o arquivo de nome
clear-text
.
- As chaves RSA estão localizadas na pasta /rsa-keys na raiz do projeto. Você pode gerar novas chaves ou adicionar um novo par de chaves e especifica-los no arquivo de configuração.
- Os envelopes criados serão salvos na pasta /encrypted-messages. Por padrão o algoritmo está configurado para salvar os envelopes como
encrypted_file
eencrypted_key
e ler estes mesmos envelopes durante a decifragem. Para realizar a decifragem de um envelope diferente, basta adicionar o par de arquivos chave e mensagem na pasta de envelopes e especifica-los no arquivo de configuração. A decifragem desses envelopes serão salvos na pasta /decrypted-messages.
Para gerar um envelope, utilize o comando:
npm run create
Para abrir o envelope, utilize o comando:
npm run open
Para contribuir com o projeto, siga estas etapas:
- Bifurque este repositório.
- Crie um branch:
git checkout -b <nome_branch>
. - Faça suas alterações e confirme-as:
git commit -m '<mensagem_commit>'
- Envie para o branch original:
git push origin main
- Crie a solicitação de pull.
Como alternativa, consulte a documentação do GitHub em como criar uma solicitação pull.
As seguintes pessoas contribuíram para este projeto:
Pumba Developer |
Elyvya Teles |
Copyright © 2023 Pumba Developer