Jump to content

trevizan

Apoiadores
  • Content Count

    43
  • Joined

  • Last visited

Community Reputation

16 Good

1 Follower

About trevizan

Recent Profile Visitors

650 profile views
  1. 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.
  2. 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.
  3. 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.
  4. 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; }
  5. 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.
  6. Parabéns, @fredericopissarra. Pelos livros e pela atitude de disponibilizá-los.
  7. 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.
  8. 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.
  9. 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).
  10. 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.
  11. 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).
  12. 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.
  13. 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.
  14. Isso, @Fernando Mercês!
×
×
  • Create New...