2. segurança da informação
- Os 5 pilares da segurança da informação:
1. Confidencialidade - Acesso somente por pessoas autorizadas;
2. Integridade - Informação confiável e exata;
3. Disponibilidade - Informação sempre disponível;
4. Autenticidade - Que a informação possa ser aberta somente pelo
remetente e que não sofra alteração;
5. Legalidade - Garante que a informação não inflija a lei vigente;
3. java.security
- O java.security define classes relacionadas a área de segurança isto
inclui criptografia, infra-estrutura de chave pública, comunicação
segura, autenticação e controle de acesso.
4. message-digests algorithm (hash)
- Um hash é uma sequencia de bits geradas por um algoritmo de
dispersão;
- Geralmente representado em base Hexadecimal (0 a 9 e A a F);
- Tamanho fixo e Unidirecionalidade;
- CONCEITO: Transforma grandes quantidades de dados em uma
pequena quantidade de informações;
- Hashs mais comuns: MD-5, SHA-1, SHA-256;
- java.security.MessageDigest;
5. É IMPORTANTE RESSALTAR!
Tipos Primitivos:
FAMÍLIA | Tipo Prim. Clss Invólucro Tamanho | Exemplo
Lógico | boolean - Boolean - 1 bit | true
Literal | char - Character/String - 1 byte | ‘A’
Inteiro | byte - Byte - 1 byte | -128 a 127 (11111111)
7. DSA - ASSINATURA DIGITAL
- Assinatura digital em criptografia nos assegura que o documento
digital não sofreu nenhuma alteração não autorizada;
- Difere-se de “assinatura eletrônica”;
- DSA (Digital Signature Algorithm);
- CONCEITO: A assinatura digital providencia que a mensagem veio
corretamente do emissor;
- java.security.Signature
8. Esquema
Uma vez que você tem um
objeto de chave privada,
você pode criar uma
assinatura digital com um
java.security.Signature
objeto:
9. É IMPORTANTE RESSALTAR!
- Para gerar as chaves públicas e privadas utilizamos a classe
KeyPairGenerator;
- a KeyPairGenerator precisa de um algoritmo para gerar a chave, para
isto aplicamos o método KeyPairGenerator.getInstance;
- Tanto a chave quanto a assinatura precisam ser gerados pelo mesmo
algoritmo, no nosso caso aplicaremos o DSA;
11. Criptografia
- O pacote java.security possui pacotes baseados em CRIPTOGRAFIA ,
porém não contem classes para CRIPTOGRAFAR e
DESCRIPTOGRAFAR.
- usando o javax.crypto podemos usar criptografia
de chave simétrica.
12. Chave Secreta
- O primeiro passo em
qualquer operação de
CRIPTOGRAFIA é a obtenção
de uma chave secreta
apropriada para cada caso.
- Como o programa Keytool
fornecido junto com o JDK
não pode gerar e armazenar
chaves o programa deve lidar
com essas tarefas em si.
15. Gerando Chave
- A chave geralmente é um numero pequeno de até 256 bits, podemos
usar o RNG e o PRNG.
- RNG, gera números aleatórios, onde não há como o processo ser
repetido.
- PRNG, PSEUDO NÚMEROS ALEATÓRIOS, onde podemos gerar o mesmo
número gerado antes, se tivermos a mesma situação que gerou o
número anterior.
16. Bloco/Fluxo
- Cifragem por Bloco - Antes da cifragem o texto é divido em blocos.
-> melhor usado para criptografar dados estáticos
- Cifragem por Fluxo - cada bit é criptografado
17. Criptografia com Cipher
- Um possível problema na cifragem de blocos é a ocorrência de padrões.
Para evitar o reconhecimento de tais padrões usam-se algumas técnicas,
entre elas o Cipher Block Chaining (CBC), Cipher Feedback Block (CFB),
Electronic Code Book (EBC) entre outros.
20. Bibliografia
- Oreilly Java in a Nutshell 5ª edição Março 2005
- Criptografia e Segurança de Redes - William Stalings
- http://www.devmedia.com.br/utilizando-criptografia-simetr
ica-em-java/31170
- https://docs.oracle.com/javase/8/docs/technotes/guides/se
curity/
- http://blog.desenvolvedor.org/criptografia-de-senhas