Jump to content

trevizan

Apoiador Nibble
  • Posts

    45
  • Joined

  • Last visited

  • Country

    Brazil

Everything posted by trevizan

  1. De nada e grato por responder à minha curiosidade. Espero que atinja seu objetivo. Boa sorte!
  2. Não sei se você é familiarizado, mas comumente projetos "abertos" têm seus códigos-fontes disponíveis. Tome cuidado para você não estar infringindo nenhuma cláusula de direito autoral. Ok?! Procure saber sobre a licença antes de utilizar o software, principalmente se for utilizar para fins comerciais. Isso que você está querendo fazer chama-se engenharia reversa. Para grande maioria dos casos, não é uma tarefa nada simples de executar. Além disso, envolve um certo dilema ético e legal. No canal papo binário lá no youtube tem um curso inteiro sobre isso, e aqui no site também há um livro sobre o assunto.
  3. Qual o nome desse projeto?
  4. Nessa semana que passou, o NIST anunciou os algoritmos criptográficos resistentes a computadores quânticos (ou algoritmos criptográficos pós-quânticos) aprovados para a próxima rodada do processo de padronização. Sete algoritmos são considerados finalistas (4 para cifração com chave pública e acordo de chaves, e 3 para assinaturas digital). Além disso, foi divulgada uma lista com oito alternativas de algoritmos que continuam como canditatos a serem padronizados futuramente. Para saber mais: https://csrc.nist.gov/projects/post-quantum-cryptography/round-3-submissions https://ladailypost.com/nist-post-quantum-cryptography-enters-selection-round/
  5. Hoje, 28/02/2020, foi resolvido o desafio RSA-250 (829 bits). https://lists.gforge.inria.fr/pipermail/cado-nfs-discuss/2020-February/001166.html O mesmo grupo de trabalho também resolveu o RSA-240 (795 bits) recentemente, em 02/12/2019. https://lists.gforge.inria.fr/pipermail/cado-nfs-discuss/2019-December/001139.html
  6. Mais comumente, primeiro é executado o processo de descompressão, jogando o binário do software inteiro na memória, e depois executa-se o software final, mas também é possível descomprimir dinamicamente de acordo com o fluxo de execução, nesse caso o controle será muito mais complexo.
  7. Olá, é bem difícil aconselhar pois são cursos bem distintos com diferentes focos. O importante é ter em mente que durante a graduação você deve focar em estabelecer bases sólidas para a sua carreira após a graduação. Eu fiz graduação em sistemas da informação, mestrado em eng. da computação e quase terminei o doutorado na mesma área do mestrado, mas tive que interromper. Fica claro que me achei mais em engenharia, mas não me arrependo em nada em ter feito graduação em sistemas. A área da segurança é bem abrangente também, mas vou tentar dar minha visão (generalizando em alguns pontos): Sistemas de informação vai te dar uma base sobre como a computação pode ser utilizada em sistemas e processos corporativos com um viés sócio-técnico. Se você acha que tem mais esse perfil, meu conselho é: não negligencie as disciplinas de humanas, pois elas te farão diferenciado. Esse tipo de curso pode ser muito bom se você quiser trabalhar com processos de segurança da informação, compliance, auditoria, etc... Em ciência da computação você vai obter uma base matemática forte, focando bastante em entender a teoria da computação e sua evolução. Em geral oferece uma base sólida bem específica, e você não necessariamente vai usá-la de forma clara no dia-a-dia, mas vai servir muito bem para entender o que acontece dentro das "caixas pretas" (para a maioria dos trabalhos em corporações, estou generalizando de acordo com o que observo no mercado). Essa base é bem importante se você quiser trabalhar com ciência de dados, engenheria reversa ou criptografia, por exemplo. Para o curso de engenharia de software eu não consigo opinar muito, mas me parece sistemas de informação com menos parte de humanas/ sócio técnico e com extras de tecnologias. Muita coisa aplicada que é fácil aprender na prática ou em cursos extra curriculares. Também senti falta de algumas disciplinas tradicionais presentes na grade da maioria dos cursos de engenharia, como: cálculo 2 e 3, cálculo numérico, resistência dos materiais, mecânica dos fluídos, etc... Pensando na área da segurança parece interessante para quem quer atuar em processo de desenvolvimento seguro. Do curso de inovação, eu achei muito aberto e, na minha opinião, demanda muita maturidade para escolher bem as optativas , acho que seria mais ideal se você já tivesse uma base sólida em computação, pelo menos um bom curso técnico ou tecnológico, e já estivesse atuando no mercado e sabendo muito bem o que quer. Além disso, você pode enfrentar o obstáculo dos recrutadores não saberem exatamente do que se trata seu curso e se o mesmo ofereceu as bases que você precisa para preencher determinadas vagas (novamente estou generalizando com base no que observo, não realizei nenhum estudo que prova esse ponto de vista). Você também pode dar uma olhada na grade de engenharia da computação, que além de uma base de algoritmos vai te oferecer base em hardware, interessante se você quiser atuar em áreas de infraestrutura (redes, virtualização, devops, por exemplo), áreas que interagem com hardware e dependem da arquitetura e da organização dos computadores (engenharia reversa, análise de malware, desenvolvimento de drivers e componentes de S.O., etc...) ou em sistemas embarcados (automação industrial, agrícola, residencial, etc.., dispositivos dedicados ou Internet das coisas). Também é importante notar que os cursos de engenharia costumam ser mais caros e de maior duração. Espero ter ajudado.
  8. Basicamente eu vi quais valores precisavam ser testados (os que não eram múltiplos de 2, 3 ou 5) a partir do número 7 e notei que essa sequência de incremento se repetia (como um padrão): 4, 2, 4, 2, 4, 6, 2 e 6. Validei os resultados de 2 a pouco mais de 32 mil e não apresentou nenhum retorno incorreto para o intervalo. Enfim, o problema é que a complexidade de todos esses algoritmos ainda é da ordem de grandeza de raiz quadrada de n, ou seja, ainda é alta. Eu preciso estudar melhor o crivo de Erastótenes para opinar, mas a primeira vista a abordagem me parece bem diferente e o ganho de desempenho não compensa a limitação de valor máximo que pode ser testado. Daí talvez seja mais interessante brincar com coisas mais sérias, como o teste de Fermat ou AKS, que apresentam complexidade logarítmica.
  9. Olás! Fiquei pensando como seria estender a estratégia de eliminar os testes de ímpares múltiplos de três para também eliminar os testes dos múltiplos de cinco. Cheguei ao seguinte algoritmo. Este executa cerca de 13% mais rápido que o algoritmo anterior e cerca de 47% mais rápido que o algoritmo que só considera a raiz quadrada. int isPrime(unsigned int n) { unsigned int i, s; if (n <= 5) return (n == 2 || n == 3 || n == 5); // Mais um caso especial... Se for divisível por 2, ou por 3, ou por 5, não é primo! if ( ( n % 2 ) == 0 || ( n % 3 ) == 0 || ( n % 5 ) == 0) return 0; s = sqrt(n); for ( i = 7; i <= s; i += 6 ) { if ( ( n % i ) == 0) return 0; i += 4; if ( ( n % i ) == 0) return 0; i += 2; if ( ( n % i ) == 0) return 0; i += 4; if ( ( n % i ) == 0) return 0; i += 2; if ( ( n % i ) == 0) return 0; i += 4; if ( ( n % i ) == 0) return 0; i += 6; if ( ( n % i ) == 0) return 0; i += 2; if ( ( n % i ) == 0) return 0; } return 1; }
  10. Muito interessante, acho que consigo explicar como funciona de uma forma complementar. Esse algoritmo pula os ímpares múltiplos de três no momento que incrementa quatro no contador (i+=4) , a partir do número nove, visto que a divisibilidade por três já foi testada. Desta forma: testa o 5; // valor inicial testa o 7; //após incrementar i+=2 pula o 9; //ao incrementar i+=4 testa o 11; //após incrementar i+=4 testa o 13; //após incrementar i+=2 pula o 15; //ao incrementa i+=4 testa o 17; //após incrementar i+=4 testa o 19; //após incrementar i+=2 pula o 21; //ao incrementa i+=4 ... e assim por diante. Note que comparado a abordagem que você descreveu anteriormente, em um ciclo de três testes (if ( ( n % i ) == 0) ) um teste é eliminado . Assim, é possível eliminar 1/3 dos testes a serem executados.
  11. Parabéns, @fredericopissarra. Pelos livros e pela atitude de disponibilizá-los.
  12. Salve! Já está em tempo de estrear esta seção do fórum e usar um pouco do hype da suposta chamada supremacia quântica, alcançada pelo Google, para motivar o estudo de uma nova área. Novamente venho aqui indicar um vídeo do Nerdologia (fazer o que?!) que traz uma ótima visão geral dos conceitos e desafios. Um outro vídeo que achei interessante, informal e muito menos preciso, mas que apresenta uma visão mais amigável das aplicações da tecnologia em questão, pode ser assitido a seguir. Falando em Google e supremacia quântica (termo que eu acho horrível!), o vídeo a seguir contextualiza de forma geral o assunto e comenta sobre a treta discussão saudável entre os pesquisadores do Google e da IBM. Se inglês não é problema para você, talvez seja mais interessante assistir o vídeo da própria Nature (revista científica que publicou o artigo): O único ponto que senti falta em nesses vídeos anteriores foi o entrelaçamento (ou emaranhamento) quântico, que não é exatamente computação, mas está intimamente ligado ao nosso mundo (o do Mente Binária) por sua aplicação em telecomunicação. Esse ponto é abordado no vídeo a seguir: Se você quiser ter uma visão um pouco mais formal/técnica/aprofundada, você pode assistir o vídeo a seguir: É isso! Espero que seja proveitoso para quem se interessar.
  13. Acho legal deixar o problema disponível caso outras pessoas se interessem: Desafio: [CRIPTOGRAFIA COM MATRIZES] A mensagem: JVNZFNVTP foi gerada pela Matriz A utilizando a equivalência numérica das letras do alfabeto conforme a figura 2, e esconde o nome de um famoso cientista. Descriptografe.
  14. Trata-se de um vídeo já meio antigo, mas interessante por cobrir de uma forma muito rápida e dinâmica toda a parte da história da criptografia comumente apresentada nos livros e cursos sobre o tema. Esse tópico não é útil na prática (para proteger dados), mas é importante conhecê-lo para compreender as motivações e a concepção mais básica da criptografia. Ao final do vídeo o narrador menciona a importância do advento da criptografia de chave pública ocorrido na década de 1970. Contudo, faltou mencionar a importância do advento dos computadores digitais, e do uso da lógica binária e da álgebra booleana, avanços ocorridos nas décadas de 1930 e 1940 que elevaram a segurança da criptografia simétrica a um novo patamar, tornando obsoletos as técnicas e os mecanismos criptográficos anteriores (os que são explicados no vídeo).
  15. Bom, no meu entedimento o post tem a intenção de esclarecer que a apresentação em questão não demonstrou nada de novo ou desconhecido, ou seja, não mudou nada e não merece o destaque que teve, e esclarecer que não há motivos para desespero, a menos que você esteja utilizando tamanhos de chaves que não são recomendados (< 1024 bits para sistema legados e < 2048 bits para implementações novas). De forma alguma colocou-se o RSA como um criptosistema perfeito e "eternamente inquebrável", o que seria de uma ingenuidade imensa considerando o histórico observado: cifra de César e de Vigenère, Enigma ou mesmo o DES já foram seguros um dia. Visto isso, acho que os comentários levaram a discussão para uma polarização (RSA x ECC) que não existe na prática. Tanto que colocou-se o DHE como base para o RSA em oposição a ECC, mas na verdade o DHE se baseia no problema do logaritmo discreto, mesma classe de problema no qual o ECDHE e os protocolos de assinatura baseadas em curvas elípticas citados acima se apoiam. Se essa dicotomia fizesse sentido não haveria cipher suites que combinam ambas primitivas, como por exemplo a TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Concordo que ECC pode oferecer soluções mais elegantes, eficientes e com chaves menores para o mesmo nível de segurança, mas essas são apenas características dos algoritmos, isso não a torna mais segura por definição. O mais importante é conhecer qual o nível de segurança para cada parâmetro escolhido, como mostrado na tabela abaixo: fonte: https://www.keylength.com/en/4/ Além disso, é importante notar que discussões acerca da segurança das curvas elípticas já foram levantadas por pesquisadores de maior relevância na área e processos de padronização também foram interrompidos. O NIST, por exemplo, atualmente está focado em padronizar soluções de assinatura digital e encapsulamento de chaves que sejam resistentes aos algortimos quânticos conhecidos, soluções essas que não incluem RSA, ECC ou DHE que utilizamos hoje.
  16. O problema é que a cada qubit adicionado a taxa de erro cresce muito rápido. O próprio artigo diz que estima-se que para fatorar RSA-2048 precisaríamos de cerca de 20 milhões de qubits e que hoje o estado da arte apresenta 70 qubits, ou seja, há um grande caminho a se percorrer. É importante ter em mente que o algoritmo de Shor também afeta a criptografia de curvas elípticas, mas em contrapartida o NIST já está padronizando os algoritmos pós-quânticos em duas frentes: uma de assinatura baseada em hash ( https://csrc.nist.gov/Projects/Stateful-Hash-Based-Signatures) e outra mais geral (https://csrc.nist.gov/Projects/Post-Quantum-Cryptography).
  17. Poderíamos criar uma lista colaborativa de livros/materiais de redes aqui da comunidade, talvez em formato de enquete, daí os participantes poderiam "votar" se conhecerem e acharem relevante a recomendação.
  18. Senti falta do "Redes de computadores e a Internet - uma abordagem top-down" do James Kurose Trata-se de um livro que se coloca em um ponto muito interessante entre uma base teórica sólida e a prática. Recomendo fortemente.
  19. Isso, @Fernando Mercês!
  20. Percebo que os tópicos relacionados a criptografia comumente têm bastante visualizações aqui no fórum, o que demonstra muito o interesse do pessoal. Penso que talvez se houver uma seção, ou comunidade como chamam, seria possível buscar melhor esse tipo de conteúdo dentro do site e ser mais convidativo pra quem quer consumi-lo ou mesmo postar algo relacionado. Não precisa ser específico de criptografia, ao meu ver, poderia englobar criptografia, criptoanalise, esteganografia, encoding (estou usando termo em inglês para não ser ambíguo), códigos corretores de erros, compactação, ofuscação, teoria da informação, etc... Visto que esses tópicos se tangenciam, às vezes em múltiplos pontos, e muitas vezes são até confundidos entre si. Sugestão de nome (para o caso de quererem englobar os outros tópicos) : Criptografia e Teoria de Códigos.
  21. Ah, sobre o modo de operação ECB, o principal problema não é revelar dicas sobre a chave e sim dicas sobre o cifrotexto. Uma mensagem de "Bom dia!" enviada toda manhã, por exemplo, sempre resultará em um mesmo cifrotexto, dando dica para um atacante sobre o que aquele cifrotexto significa. Chamamos isso de falta de segurança semântica. Isso também afeta a segurança da transmissão de outras mídias que não texto. Um exemplo clássico é essa imagem do pinguim cifrada com ECB em comparação com a utilização de um modo de operação adequado.
  22. Sobre segurança: Ao transformar/expandir uma chave ou um password utilizando uma função de hash é importante ter em mente que se essa entrada original for menor que a chave do AES a segurança será reduzida ao tamanho dessa entrada. Assim, se você tem um password de 2 bytes, a segurança do seu AES está sendo reduzida de 128 bits (caso do AES-128) para 16 bits. No caso contrário, se a entrada for maior que 128 bits, a segurança também será reduzida a 128 bits (limitado pela segurança da cifra de bloco). No caso de estar utilizando um password como entrada, também é importante adicionar um Salt à entrada dessa transformação para evitar ataques que utilizam rainbow tables. E, se possível, utilizar uma função de password hash, como o argon2 ou lyra2, que são computacionalmente mais custosas/lentas e tornam os ataques se busca por colisão mais caros ou demorados.
  23. Muito bom, parabéns! Seguem apenas umas dicas sobre os termos de acordo com o que observo na literatura da área em língua portuguesa. Cifra normalmente é utilizado para designar o algoritmo de cifração. Exemplo: o AES é uma cifra de bloco. A saída de um algoritmo de cifração comumente é chamado de cifrotexto ou texto cifrado, e o inverso é chamado de texto claro. Galois Fields são traduzidos comumente como corpos de Galois ou corpos finitos. Os esquemas que permitem cifrar mensagens maiores que um bloco são chamados de modo de operação de cifra de bloco, ou simplesmente modo de operação.
  24. @gnoo, muito bom. É importante entender as operações de shift, principalmente se estiver implementando funções matemáticas/criptográficas para dispositivos com restrição de processamento, como boa parte dos microcontroladores que tem como uma das características o baixo consumo de energia.
×
×
  • Create New...