.--------. / .------. \ / / \ \ | | | | _| |________| |_ .' |_| |_| '. '._____ ____ _____.' | .'____'. | '.__.'.' '.'.__.' '.__ | 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]