.--------.
    / .------. \
   / /        \ \
   | |        | |
  _| |________| |_
.' |_|        |_| '.
'._____ ____ _____.'
|     .'____'.     |
'.__.'.'    '.'.__.'
'.__  | SHHH |  __.'
|   '.'.____.'.'   |
'.____'.____.'____.'
'.________________.' "O universo acredita na criptografia. É mais fácil criptografar informações do que descriptografá-las." - Julian Assange


Olá gente, hoje venho ensinar para vocês e apresentar o metodo de mandar arquivos/mensagem mais seguro e confiavel que eu utilizo no Dia a Dia o PGP
O PGP (Pretty Good Privacy) é um programa de criptografia amplamente utilizado para proteger a privacidade e a segurança de comunicações digitais.

Desenvolvido por Phil Zimmermann em 1991, o PGP permite que usuários criptografem e assinem digitalmente mensagens, arquivos e e-mails
garantindo que apenas os destinatários autorizados possam acessar o conteúdo.
Mas como isso é possivel? bom Vou explicar isso agora de uma maneira simples.

[0x1] Como PGP Funciona?

O PGP utiliza uma combinação de criptografia simétrica e assimétrica, Mas Oque Seria isso?
Bom resumidamente, criptografia simétrica usa uma chave para criptografar e descriptografar dados É rapido e eficiente, mas exige que a chave seja compartilhada de forma segura.
Por outro Lado, Criptografia assimétrica Utiliza um par de chaves: Uma Chave Pública que é utilizada Apenas para Criptografar Arquivos
E Uma Chave Privada Que é utilizada apenas Para descriptografá-las, A Chave Publica pode ser repassada para qualquer pessoa, enquanto a chave privada deve ser mantida em segredo.

A juntão das criptografia no PGP, me faz acreditar que o PGP é a criptografia mas segura que temos pois ela ja foi comprovada ser segura e algo que o Governo Ou Agencias
Não podem ter controle ou quebra-la. 
Temos Varios exemplos, Desde de Jornalistas Se comunicando e expondo podres governamentais Até Mercados Ilegais que Utilizam Da criptografia para manter o conteudo da conversa Privado.

[0x2] Exemplos

Posso Citar alguns exemplos de pessoas que usaram PGP para se manter seguro em suas mensagens e e-mails

- Edward Snowden

Edward Snowden, famoso por ser o delator americano que, enquanto trabalhava na NSA, a Agência de Segurança dos Estados Unidos, revelou o maior esquema de vigilância global.
Feito pelos Estados Unidos, esse esquema tinha planos de se expandir para outros países vizinhos. Graças à criptografia PGP e outros métodos de segurança, ele conseguiu contatar dois jornalistas.  
Ambos tiveram que aprender a usar PGP para que pudessem enviar provas e mensagens de maneira segura. E, mesmo assim, ele pediu para que ambos se encontrassem em Hong Kong, em julho de 2013.  

- Julian Assange

Julian Assange, criador do WikiLeaks, desenvolveu um refúgio onde jornalistas podiam enviar provas e documentos que revelavam crimes cometidos pelo Estado
incluindo crimes de guerra, assassinatos e censura. Em seu site, jornalistas podiam enviar seus relatos sem problemas, pois a plataforma operava por meio do TOR e PGP
garantindo que todas as mensagens e arquivos fossem transmitidos de forma segura. Além disso, esses mecanismos impediam que governos removessem o site da internet ou interferissem nas mensagens. 

- Ross Ulbricht (Dread Pirate Roberts)

Ross Ulbricht, conhecido pelo pseudônimo "Dread Pirate Roberts", foi o criador do Silk Road, um dos maiores mercados online da dark web. Lançado em 2011, o site operava através da rede TOR
Permitindo que usuários comprassem e vendessem produtos anonimamente, principalmente drogas ilícitas. Para garantir a segurança e o sigilo das comunicações dentro do Silk Road
Ulbricht utilizava Do PGP. Fazendo Com que as mensagens e transações fossem protegidas contra interceptações, garantindo que apenas o destinatário legítimo pudesse ler as informações.  
A combinação do TOR com a criptografia PGP tornou o Silk Road extremamente difícil de rastrear, permitindo que o mercado clandestino funcionasse por mais de dois anos antes de ser desmantelado pelo FBI em 2013.

[0x3] Como Utilizar?

Para utilizar PGP, Vou ensinar utilizando o GPG Gnu Privacy Guard Programa feito pela GNU e que Funciona Em Ambos, Linux/Windows graças ao https://www.gpg4win.org/
Baixando eles por suas respectivas Plataformas, Vamos Começar Criar o nosso par de chaves, Utilizando o comando: gpg --full-generate-key

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|bezumiya@x00r:~$ gpg --full-generate-key
|gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
|This is free software: you are free to change and redistribute it.
|There is NO WARRANTY, to the extent permitted by law.
|
|Please select what kind of key you want:  //Aqui é para escolher o tipo Da Sua Chave
|   (1) RSA and RSA (default) 
|   (2) DSA and Elgamal
|   (3) DSA (sign only)
|   (4) RSA (sign only)
|  (14) Existing key from card
|Your selection? 1  //Selecionei 1
|RSA keys may be between 1024 and 4096 bits long.
|What keysize do you want? (3072)  //Apenas Pressionei Enter, para Colocar O Size Padrão da Chave
|Requested keysize is 3072 bits
|Please specify how long the key should be valid.  // Aqui é para especificar o tempo de expiração da sua chave
|         0 = key does not expire
|      <n>  = key expires in n days
|      <n>w = key expires in n weeks
|      <n>m = key expires in n months
|      <n>y = key expires in n years
|Key is valid for? (0) 0
|Key does not expire at all  //Eu decidi por não expirar.
|Is this correct? (y/N) y
|
|GnuPG needs to construct a user ID to identify your key.
|
|Real name: bezumiya
|Email address: bezumiya@riseup.net   //Agora apenas precisamos colocar nossos dados como Nome/Email
|Comment: My PGP key
|You selected this USER-ID:
|    "bezumiya (My PGP key) <bezumiya@riseup.net>"
|
|Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
|We need to generate a lot of random bytes. It is a good idea to perform
|some other action (type on the keyboard, move the mouse, utilize the  //Agora ele vai pedir uma senha
|disks) during the prime generation; this gives the random number     //Lembre-se De salvar ela, pois você vai precisar dela para
|generator a better chance to gain enough entropy.                   //Todas As interações com sua chave Privada
|gpg: revocation certificate stored as '/home/user/.gnupg/openpgp-revocs.d/4FDD60BF67F87F6E3A5129BFD06ADAC26456FD6A.rev'
|public and secret key created and signed.
|
|pub   rsa3072/0xD06ADAC26456FD6A 2025-02-05 [SC]
|      4FDD60BF67F87F6E3A5129BFD06ADAC26456FD6A
|uid                              bezumiya (My PGP key) <bezumiya@riseup.net>  //E pronto :) temos um par de chave PGP
|sub   rsa3072/0xC82FB054024A27E2 2025-02-05 [E]
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Agora com nossa chave PGP criada, podemos enviar nossa chave Publica para alguma pessoa para que ela possa criptografar uma mensagem ou arquivo.

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|bezumiya@x00r:~$ gpg --export -a "bezumiya@riseup.net" > pubkey.pgp
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Assim podemos enviar a chave pubkey.pgp para qualquer pessoa, e ela vai poder importar e criptografar qualquer arquivo.
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|kitty@cardboard:~$ gpg --import pubkey.pgp
|gpg: key D63B826C5651E675: public key "bezumiya <bezumiya@riseup.net>" imported
|gpg: Total number processed: 1
|gpg:               imported: 1
|kitty@cardboard:~$ gpg --list-keys
|/home/kitty/.gnupg/pubring.kbx
|----------------------------
|pub   rsa3072 2025-02-05 [SC] [expires: 2027-02-05]
|      788C90B86FC730919217FDC5D63B826C5651E675 <bezumiya@riseup.net>  //Vamos Pegar o ID Da Chave
|uid           [ unknown] bezumiya <bezumiya@riseup.net>
|sub   rsa3072 2025-02-05 [E] [expires: 2027-02-05]
|kitty@cardboard:~$ gpg -r 788C90B86FC730919217FDC5D63B826C5651E675 --encrypt msg.txt
|gpg: E7D5F977CE423A52: There is no assurance this key belongs to the named user
|
|sub  rsa3072/E7D5F977CE423A52 2025-02-05 bezumiya <bezumiya@riseup.net>
| Primary key fingerprint: DC55 A171 72BB 586D 4F4F  10A5 61FB 2171 97B4 105D
|      Subkey fingerprint: 8AA8 290B 9403 424E 885B  77CF E7D5 F977 CE42 3A52
|
|It is NOT certain that the key belongs to the person named 
|in the user ID.  If you *really* know what you are doing,
|you may answer the next question with yes.
|
|Use this key anyway? (y/N) y  //Pronto Arquivo Criptografado! (msg.txt.gpg)
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Agora o Usuario pode mandar o arquivo msg.txt.gpg para o dono da chave privada no caso, Eu mesmo :D
Baixando o Arquivo, apenas precisamos descriptografar.
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|bezumiya@x00r:~$gpg --decrypt msg.txt.gpg  //Ele vai Pedir a Senha da Chave Privada
|gpg: encrypted with 3072-bit RSA key, ID 0xE339189519B3314C, created 2025-02-06
|      "bezumiya <bezumiya@riseup.net>"
|Ola :)
|
|Eu estou aqui para provar que ainda existem uma maneira segura de enviar mensagens!
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

E pronto, Temos uma mensagem criptografada e descriptografada usanddo a criptografia PGP.
Agora que sabemos o basico Do PGP e sobre o utilitario GPG, podemos abordar outros topicos.

[0x4] Confiança em Chaves 

Você deve ter percebido que quando eu estava criptografando um arquivo você percebe que tinha essa mensagem:

"It is NOT certain that the key belongs to the person named 
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes."

Essa mensagem acontece por causa da confiança da Chave que estava em Desconhecida. E para isso vamos editar o nivel de confiança da chave, mas Por que Isso importa?

A principal Razão para o nivel de confiança no GPG, é para evitar ataques MITM (Man in the middle).
Alguém pode interceptar  sua comunicação e fornecer uma chave falsa, fazendo com que você criptografe mensagens para um atacante em vez do destinatário real.
Definir confiança corretamente ajuda a prevenir esse tipo de ataque.

E então, para mudar a confiança das chaves vamos precisar usar os seguintes comandos:

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|kitty@cardboard:~$ gpg --edit-key 788C90B86FC730919217FDC5D63B826C5651E675 //Coloque a keyID da Sua Chave respectivamente
|gpg (GnuPG) 2.2.45; Copyright (C) 2024 g10 Code GmbH
|This is free software: you are free to change and redistribute it.
|There is NO WARRANTY, to the extent permitted by law.
|
|
|pub  rsa3072/D63B826C5651E675
|     created: 2025-02-06  expires: never       usage: SC
|     trust: unknown       validity: unknown
|sub  rsa3072/E339189519B3314C
|     created: 2025-02-06  expires: never       usage: E
|[ unknown] (1). bezumiya <bezumiya@riseup.net> //Olhe que a confiança da chave esta desconhecida
|
|gpg> trust //Modificando a Confiança
|pub  rsa3072/D63B826C5651E675
|     created: 2025-02-06  expires: never       usage: SC
|     trust: unknown       validity: unknown
|sub  rsa3072/E339189519B3314C
|     created: 2025-02-06  expires: never       usage: E
|[ unknown] (1). bezumiya <bezumiya@riseup.net>
|
|Please decide how far you trust this user to correctly verify other users' keys
|(by looking at passports, checking fingerprints from different sources, etc.)
|
|  1 = I don't know or won't say
|  2 = I do NOT trust
|  3 = I trust marginally
|  4 = I trust fully
|  5 = I trust ultimately
|  m = back to the main menu
|
|Your decision? 5  //Eu Coloquei no 5 Pois eu conheço o dono da chave (eu mesmo xD)
|Do you really want to set this key to ultimate trust? (y/N) y
|pub  rsa3072/D63B826C5651E675
|     created: 2025-02-06  expires: never       usage: SC
|     trust: ultimate      validity: unknown
|sub  rsa3072/E339189519B3314C
|     created: 2025-02-06  expires: never       usage: E
|[ unknown] (1). bezumiya <bezumiya@riseup.net>
|Please note that the shown key validity is not necessarily correct
|unless you restart the program.
|
|gpg> quit
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Assim podemos Criptografar e fazer outras ações sem Avisos do GPG pois você editou a confiança falando que você confia totalmente nessa chave publica.
Agora ja que eu mostrei como editar a confiança vamos para outra funcionalidade do gpg, que é assinar arquivos e chaves.

[0x5] Assinar Arquivos

Assinar arquivos e mensagens com GPG permite garantir que o conteúdo não foi alterado e que ele realmente veio de você.
A assinatura digital usa sua chave privada para assinar, e qualquer pessoa pode verificar a autenticidade usando sua chave pública.

Vamos criar um arquivo .txt com uma mensagem e assiná-lo digitalmente usando GPG:

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|bezumiya@x00r:~$ echo ":3 hii" > msg.txt
|bezumiya@x00r:~$ gpg --clearsign msg.txt  //Estou usando --clearsign Porem existem varios outros. 
|bezumiya@x00r:~$ cat msg.txt.asc 
|-----BEGIN PGP SIGNED MESSAGE-----
|Hash: SHA512
|
|:3 hii
|-----BEGIN PGP SIGNATURE-----
|
|iQITBAEBCgB9FiEEeIyQuG/HMJGSF/3F1juCbFZR5nUFAmekKz5fFIAAAAAALgAo
|aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDc4
|OEM5MEI4NkZDNzMwOTE5MjE3RkRDNUQ2M0I4MjZDNTY1MUU2NzUACgkQ1juCbFZR
|5nUo9Qv/TkADYVxKg7yxmhTRfuf1jNOX/HvUcZ7TkQtnLMRXD/leas3GE71awPro
|T64KF52jdy7AZ/H2Ts4i7szrn/Om6TX6KXmh9yAw2CyqEyMJqZTebPuvkbfYQ4sc
|+9WU7dTPstnLONIwu9sf7GCncarNCjdIXMuRBjbezWibifVpf2qnA4HbbbwfGZKl
|HHE9DZIZYyrCYoH595O8qdTD4zqzPblZNXrWQLsZNpgqHCSDtfMcx96G80Jl9OUb
|VBDUznoJ8+BqU3vmm3Hq2U+H6bpVUim7PWEqGN2eKwlIWfDX2Gs7D/01LLDwphj2
|S/21TAcCfmUAw3xbHKtwfXig/PWEZqS/ejv8iNVAi0GhpUBjLu8BAOXqY6NCfoQx
|f2kChLsAcD0W5mevxtiFPcP51dY47NLwRFQq+9jTfbEHBBf/94hSxPEtdqS55s8l
|c01VVZ3JFLnNhzDzbK0w0vb0Zf/fZOZ8ChnBlODReFO5vvarV7XryjVbywtuCXNR
|fWiBi0Kr
|=PQLS
|-----END PGP SIGNATURE-----
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Bom, agora podemos enviar esse texto para outra pessoa para que ela valide e verifique que esse ":3 hii" foi realmente escrito por mim.

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|kitty@cardboard:~$ gpg --verify msg.txt.asc
|gpg: Signature made Thu Feb  6 03:23:42 2025 UTC
|gpg:                using RSA key 788C90B86FC730919217FDC5D63B826C5651E675
|gpg: checking the trustdb
|gpg: marginals needed: 3  completes needed: 1  trust model: pgp
|gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
|gpg: Good signature from "bezumiya <bezumiya@riseup.net>" [ultimate]
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Agora você deve estar pensando: "Ah, e se eu mudar a mensagem que está assinada?" Bom, eu mudei 1 caractere na mensagem e vou verificá-la novamente:
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|kitty@cardboard:~$ cat msg.txt.asc
|-----BEGIN PGP SIGNED MESSAGE-----
|Hash: SHA512
|
|:) hii
|-----BEGIN PGP SIGNATURE-----
|
|iQITBAEBCgB9FiEEeIyQuG/HMJGSF/3F1juCbFZR5nUFAmekKz5fFIAAAAAALgAo
|aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDc4
|OEM5MEI4NkZDNzMwOTE5MjE3RkRDNUQ2M0I4MjZDNTY1MUU2NzUACgkQ1juCbFZR
|5nUo9Qv/TkADYVxKg7yxmhTRfuf1jNOX/HvUcZ7TkQtnLMRXD/leas3GE71awPro
|T64KF52jdy7AZ/H2Ts4i7szrn/Om6TX6KXmh9yAw2CyqEyMJqZTebPuvkbfYQ4sc
|+9WU7dTPstnLONIwu9sf7GCncarNCjdIXMuRBjbezWibifVpf2qnA4HbbbwfGZKl
|HHE9DZIZYyrCYoH595O8qdTD4zqzPblZNXrWQLsZNpgqHCSDtfMcx96G80Jl9OUb
|VBDUznoJ8+BqU3vmm3Hq2U+H6bpVUim7PWEqGN2eKwlIWfDX2Gs7D/01LLDwphj2
|S/21TAcCfmUAw3xbHKtwfXig/PWEZqS/ejv8iNVAi0GhpUBjLu8BAOXqY6NCfoQx
|f2kChLsAcD0W5mevxtiFPcP51dY47NLwRFQq+9jTfbEHBBf/94hSxPEtdqS55s8l
|c01VVZ3JFLnNhzDzbK0w0vb0Zf/fZOZ8ChnBlODReFO5vvarV7XryjVbywtuCXNR
|fWiBi0Kr
|=PQLS
|-----END PGP SIGNATURE-----
|kitty@cardboard:~$ gpg --verify msg.txt.asc
|gpg: Signature made Thu Feb  6 03:23:42 2025 UTC
|gpg:                using RSA key 788C90B86FC730919217FDC5D63B826C5651E675
|gpg: BAD signature from "bezumiya <bezumiya@riseup.net>" [ultimate]
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Assim vemos a segurança que o pgp tem, apenas um caractere trocado faz com que toda a assinatura não funcione.

[0x6] Finalização

E é isso! Espero que você comece a utilizar mais o PGP e outras formas de criptografia, aprofundando-se nesses assuntos. Esteja seguro e até o próximo post!

[Inicio]