Universidade Federal de Pernambuco Centr o de Infor mática. Utilizando classes das bibliotecas Java na aplicação de conceitos de segurança
|
|
- Carmem Angelim Aires
- 8 Há anos
- Visualizações:
Transcrição
1 Universidade Federal de Pernambuco Centr o de Infor mática Ciências da Computação Criptografia Utilizando classes das bibliotecas Java na aplicação de conceitos de segurança Equipe: Jorge Ferraz (jfof) Marcus Vinicius (mvgs)
2 Assinaturas digitais Na primeira parte desse projeto, vamos mostrar uma maneira simples de utilizarmos a biblioteca matemática de Java (java.math) na implementação dos algoritmos que foram vistos em sala de aula. 1) A classe BigInteger A classe BigInteger pertence ao pacote java.math. Representa números inteiros grandes. A vantagem da utilização dessa classe na implementação de funções da criptografia é que a) Ela representa os valores na notação de complemento a dois; b) Possui todos os operadores matemáticos básicos sobre inteiros; c) Possui funções complexas já implementadas, tais como aritmética modular, algoritmo de Máximo Divisor Comum e geração de números primos Por essa razão, essa classe foi usada na implementação dos algoritmos utilizados nesse projeto. 2) A classe RSA O RSA, de acordo com a Wikipedia, é um algoritmo de encriptação de dados, que deve o seu nome a três professores do Instituto MIT (fundadores da actual empresa RSA Data Security, Inc.), Ron Rivest, Adi Shamir e Len Adleman, que inventaram este algoritmo até à data (2005), a mais bem sucedida implementação de sistemas de chaves assimétricas, e fundamenta se em Teorias Clássicas dos Números. É considerado dos mais seguros, já que mandou por terra todas as tentativas de quebrá lo. Foi também o primeiro algoritmo a possibilitar encriptação e assinatura digital, e uma das grandes inovações em criptografia de chave pública. O seu funcionamento é simples. Baseado na idéia da criptografia assimétrica, consiste na geração de duas chaves, uma pública e uma privada, utilizadas uma para a encriptação e outra para a decriptação. O RSA precisa gerar cinco números: a) Um número p, primo; b) Um número q, igualmente primo; c) Um número N (módulo), tal que N = p * q; d) Um número e (expoente); e e) Um número d (expoente), tais que e * d mod[(p 1)(q 1)] = 1
3 Esses números são, então, utilizados nos esquemas de segurança baseados em RSA. No escopo específico desse trabalho, serão utilizados para a aplicação de algoritmos de assinatura digital. No geral, a chave pública do algoritmo RSA é o par (N, e) e a chave privada, a tupla (N, p, q, d). Nos algoritmos de encriptação assimétrica, o emitente da mensagem a encripta com a chave pública e somente o destinatário, com a chave privada, é capaz de recuperá la. Nos algoritmos de assinaturas digitais, ao contrário, o emitente da mensagem é que a assina com a chave privada e, a partir de então, qualquer um pode, de posse da chave pública, verificar a assinatura. A utilização da classe BigInteger, citada acima, torna a implementação do RSA simples e elegante. O construtor da classe gera os números (N, p, q, d, e). RSA.java Segue a implementação do algoritmo RSA. O construtor, responsável pela geração dos números, é como se segue: public RSA(int bitlen) SecureRandom r = new SecureRandom(); p = new BigInteger(bitlen / 2, 100, r); q = new BigInteger(bitlen / 2, 100, r); n = p.multiply(q); BigInteger m = (p.subtract(biginteger.one)).multiply(q.subtract(biginteger.one)); e = new BigInteger("3"); while(m.gcd(e).intvalue() > 1) e = e.add(new BigInteger("2")); d = e.modinverse(m); Ele recebe o tamanho (em bits) do módulo N que o usuário deseja. Para tanto, ele gera dois números primos, cada um de cumprimento N / 2. Note que a própria classe BigInteger se encarrega de fazer essa geração. É importante frisar que tal geração é probabilística, contudo apresenta uma probabilidade muito boa: no caso citado, os números p e q têm uma probabilidade de ser primos de pelo menos 1 1 / 2 100, o que é bastante alto. Note também que as funções de Máximo Divisor Comum são utilizadas para gerar os expoentes e e d. Com essas funções já implementadas, a implementação da classe torna se muito simples.
4 Dados esses números, é preciso apenas aplicar a definição do algoritmo, isto é, as funções de encriptação e decriptação. Novamente, a classe BigInteger faz com que tais operações sejam feitas de maneira bastante simples: public BigInteger encrypt(biginteger message) return message.modpow(e, n); public BigInteger decrypt(biginteger message) return message.modpow(d, n); Com essas funções simples, é possível combiná las em blocos para cifrar mensagens maiores do que o limite de um BigInteger. Isso foi o que foi feito na implementação desse projeto (ver anexo). 3) O paradigma TrapDoor A maneira mais imediata de se utilizar RSA para na implementação de algoritmos de assinatura digital é através da utilização direta do algoritmo para encriptar e decriptar. Essa implementação é conhecida como trapdoor, e consiste simplesmente no seguinte: Utilizando se da classe RSA exposta acima, foram feitos o Signer e o Verifier que utilizar o Trapdoor para produção e verificação de assinaturas digitais. Eles são como se segue: public Signer (BigInteger pd, BigInteger pn) this.d = pd; this.n = pn; public BigInteger sign (BigInteger pmensagem) return pmensagem.modpow(d, n);
5 public Verifier(BigInteger pe, BigInteger pn) this.e = pe; this.n = pn; public BigInteger verify(biginteger message) return message.modpow(e, n); Com essa implementação simples, conseguimos fazer um esquema de assinatura digital. O mesmo foi verificado e mostrou se plenamente funcional; as assinaturas foram produzidas e as mensagens foram verificadas com suas respectivas assinaturas, sendo aceitas; o mesmo não acontecendo com assinaturas diferentes das que foram geradas pelo algoritmo de assinatura. 4) Os problemas do TrapDoor Sabe se que o TrapDoor não apresenta segurança; de fato, devido às próprias características do RSA, é extremamente simples conseguir um par mensagem / assinatura que seja aceito pelo verificador de assinaturas sem ter sido gerado pelo algoritmo de assinatura. Com o intuito de demonstrar essa fraqueza, nós implementamos dois Forgers, que geram, de duas maneiras diferentes, pares que sejam reconhecidos pelo algoritmo verificador como autênticos pares. O primeiro deles é o que simplesmente retorna o par (1, 1). Olhando as características do RSA e as operações que são realizadas, fica óbvio que tal par vai ser reconhecido como verdadeiro: o número 1, elevado a qualquer expoente que seja, vai dar como resultado 1 e, portanto, vai ser aceito pelo verificador. O segundo deles é o que aplica a operação inversa. Ele gera uma assinatura qualquer e, a partir dela, aplica as operações de exponenciação modulares para gerar a mensagem. Também ele, pela definição do RSA, vai gerar um par que vai ser reconhecido como válido pelo verificador. Ambos são como se segue: public class Forger1 public static void main (String[] args)
6 ( ) //A mensagem forjada byte[] mensagem = 1; int tamanho = 1; //A Tag de assinatura BigInteger[] tag = signer.sign(mensagem); //Verificando... boolean autentica = verifier.verify(new String(mensagem), tag, tamanho); if (autentica) System.out.println("A mensagem é autentica!"); else System.out.println("A mensagem não é autentica!"); public class Forger2 public static void main (String[] args) (...) //A tag forjada Random random = new Random(); int nbytes = random.nextint(10) +1; //Uma tag de 1 a 10 bytes byte[] tag = new byte[nbytes]; for (int i = 0; i < nbytes; i++) //Gera a tag aleatoriamente tag[i] = (byte) random.nextint(255); BigInteger tagforjada = new BigInteger(tag); BigInteger mensagemforjada = tagforjada.modpow(rsa.gete(), rsa.getn()); byte[] mensagem = mensagemforjada.tobytearray(); int tamanho = mensagem.length; //Verificando... boolean autentica = verifier.verify(
7 new String(mensagem), new BigInteger[] tagforjada, tamanho); if (autentica) System.out.println("A mensagem é autentica!"); else System.out.println("A mensagem não é autentica!"); Ambos esses adversários conseguem, de maneira bastante simples, produzir um par mensagem / assinatura que seja reconhecido pelo algoritmo de verificação sem ter sido produzido pelo algoritmo de assinatura. 5) A Solução: Paradigma Hash Then Invert Uma solução simples para esse problema é a utilização de uma função Hash. Se encriptarmos, ao invés da mensagem, o hash daquela mensagem, estaremos acrescentando uma dificuldade a mais aos adversários que porventura desejarem encontrar brechas no esquema de segurança. Isso acontece porque, com a utilização de uma função Hash, estaremos obrigando o adversário a quebrar a função Hash ou o RSA, o que é bem mais difícil. Aplicando o RSA não à mensagem pura, mas ao seu hash, no algoritmo de assinatura (e fazendo, evidentemente, o seu correspondente no algoritmo de verificação), nós inutilizamos os dois ataques que foram apresentados logo acima. A idéia por detrás do Hash Then Invert é a seguinte: Isso foi implementado no nosso projeto. Como função Hash, utilizamos a SHA1. As novas classes Signer e Verifier ficam como se segue: public Signer (BigInteger pd, BigInteger pn) this.d = pd; this.n = pn; this.sha1 = new SHA1(); public BigInteger[] sign(string pmsg) //Hasheia a mensagem String msg = sha1.dohash(pmsg);
8 //Transforma a mensagem hasheada num array de bytes byte[] mensagem = msg.getbytes(); //Assina a mensagem BigInteger[] tag = this.sign(mensagem); return tag; public Verifier(BigInteger pe, BigInteger pn) this.e = pe; this.n = pn; this.sha1 = new SHA1(); public boolean verify(string pmsg, BigInteger[] ptag, int ptamanho) byte[] b = this.verify(ptag, ptamanho); String mensagem = new String(b); //Hasheia a mensagem String msg = this.sha1.dohash(pmsg); return mensagem.equals(msg); Com esse novo paradigma, nós evitamos os problemas do TrapDoor. Os mesmos Forgers anteriormente utilizados foram aplicados novamente, e eles não conseguiram quebrar esse paradigma de assinaturas digitais. Portanto, nós concluímos que a utilização de uma função Hash é uma estratégia que melhora bastante a segurança de um esquema de assinaturas digitais baseado em RSA. 6) Adicionando propriedades de segurança a uma aplicação usando o pacote java.security A linguagem java oferece uma maneira prática de incluir ferramentas de segurança no seu sistema, o pacote java.security. Nesta seção explicitaremos através de um exemplo de aplicação de assinatura digital, como oferecer propriedades de segurança em uma aplicação java usando o pacote supracitado. No pacote java.security existem classes que definem como usar os algoritmos de segurança em uma aplicação java, porém não oferecem a implementação desses algoritmos. A implementação dos algoritmos pode ser oferecida por qualquer um, através dos chamados Providers. Um Provider é um pacote implementado por terceiros você
9 pode construir o seu se quiser que oferece a implementação dos algoritmos de criptografia, seguindo a definição das interfaces e classes do pacote java. security. O pacote oferece uma forma de abstração da implementação dos algoritmos, você pode embutir propriedades de segurança no seu sistema a partir de java.security, e mudar para o Provider que achar mais conveniente, quando achar mais conveniente, sem alterar uma linha de código da sua aplicação. Provider IBM Aplicação java Pacote java.security Provider SUN Provider Bouncy Castle O primeiro passo a se seguir é dizer ao pacote java.security, que quer usar um determinado Provider na sua aplicação, isso é feito com a seguinte linha de código: Security.addProvider(new rg.bouncycastle.jce.provider.bouncycastleprovider()); Essa linha inclui o Provider Bouncy Castle no seu sistema, e torna seus algoritmos prontos para o uso. Feito isso, você já pode usar qualquer um dos vários algoritmos oferecidos pelo Bouncy Castle, entre eles: DES, AES, RSA, PKCS, SHA1, MD5 etc. Exemplificaremos o uso do pacote mostrando como se pode incluir um recurso de assinatura digital, do paradigma supracitado Hash then Invert usando os algoritmos MD5 e RSA, num sistema java de maneira simples. Como segundo passo para utilização da assinatura digital, instanciamos as chaves pública e privada que vamos usar para verificar e gerar as assinaturas. As seguintes linhas de código fazem o trabalho: //KeyPairGenerator é uma classe do pacote java.security que define um gerador de chaves qualquer KeyPairGenerator kpg; //KeyPair é uma classe do pacote que define um par de chaves, uma pública e outra privada KeyPair kp; //O gerador de chaves declarado acima é instanciado para a implementação do gerador de chaves para o algoritmo RSA (primeiro parâmetro) oferecida pelo Provider BC (Bouncy Castle). O primeiro parâmetro poderia se referir a qualquer algoritmo
10 oferecido pelo BC que gere um par de chaves. O segundo poderia se referir a qualquer provider incluído previamente no seu sistema kpg = KeyPairGenerator.getInstance("RSA", "BC"); //Inicializa o gerador de chaves para gerar chaves de 512 bits kpg.initialize(512); //Gera um par de chaves e o atribui ao atributo KeyPair declarado anteriormente kp = kpg.genkeypair(); Definimos a seguir, um método que gera as assinaturas para qualquer cadeia de caracteres passada como parâmetro: public byte[] Assinatura(String mensagem) //Declara uma nova assinatura digital, setando a para a implementação do hash then invert MD5 com RSA disponível no Bouncy Castle Signature sig = Signature.getInstance("MD5withRSA", "BC"); //Inicia o processo de assinatura usando a chave privada gerada no bloco de código anterior sig.initsign(kp.getprivate()); //Inclui a mensagem passada com parâmetro para ser assinada sig.update(mensagem); //Gera uma assinatura para a mensagem usado a chave privada return sig.sign(); Pronto! Com essas poucas linhas de código temos a capacidade de gerar assinaturas digitais MD5 com RSA no nosso sistema. Note que para modificarmos o algoritmo de assinatura ou o Provider é necessário apenas mudar os parâmetros dos métodos getinstance para o algoritmo e Provider que desejarmos, sem mudar mais nada no código. Para verificar assinaturas, podemos usar o método definido a seguir: public boolean Verificar(String mensagem, String assinatura) //Declara uma nova assinatura digital, setando a para a implementação do hashthen invert MD5 com RSA disponível no Bouncy Castle. Poderia ser usada a mesma assinatura definida no bloco de código anterior Signature sig = Signature.getInstance("MD5withRSA", "BC"); //Inicia o processo de verificação usando a chave pública gerada no primeiro bloco de código sig.initverify(kp.getpublic()); //Inclui a mensagem passada como parâmetro para ser verificada sig.update(mensagem); //Verifica a autencidade da mensagem com a assinatura passada com parâmetro return sig.verify(assinatura);
11 Com o exemplo acima vemos como o pacote java.security poupa um grande trabalho oferecendo uma maneira muito simples de adicionar propriedades de segurança a um sistema java, pois com essas poucas linhas de código no sistema podemos definir assinaturas e verificá las usando algoritmos consagrados, como o MD5 e o RSA. O uso de esquemas de encriptação, cifras de bloco etc. é definido de maneira semelhante. Como projeto para exemplificar o usar o prático do pacote, definimos uma aplicação java que gera assinaturas usando os diversos algoritmos oferecidos pelo Bouncy Castle. Um screenshot da aplicação encontra se na apresentação feita em sala. Algo a se levar em consideração no uso dessa solução é a confiabilidade de quem oferece o Provider. Você deve se assegurar de que os algoritmos estão implementados de forma correta na linguagem, seguindo fielmente a especificação dos mesmos. Só assim você pode assumir e provar as propriedades de segurança asseguradas aos algoritmos pelos modelos matemáticos estudados durante o curso.
12 Anexos RSA.java /* * Created on 22/08/2005 * * TODO To change the template for this generated file go to * Window Preferences Java Code Style Code Templates */ package rsa; import java.math.biginteger; import java.security.securerandom; /** jfof * * TODO To change the template for this generated type comment go to * Window Preferences Java Code Style Code Templates */ public class RSA private BigInteger n, d, e, p, q; /** Returns the d. */ public BigInteger getd() return d; /** Returns the e. */ public BigInteger gete() return e; /** Returns the n. */ public BigInteger getn() return n; /** Returns the p. */
13 public BigInteger getp() return p; /** Returns the q. */ public BigInteger getq() return q; public RSA(int bitlen) SecureRandom r = new SecureRandom(); p = new BigInteger(bitlen / 2, 100, r); q = new BigInteger(bitlen / 2, 100, r); n = p.multiply(q); BigInteger m = (p.subtract(biginteger.one)).multiply(q.subtract(biginteger.one)); e = new BigInteger("3"); while(m.gcd(e).intvalue() > 1) e = e.add(new BigInteger("2")); d = e.modinverse(m); public BigInteger encrypt(biginteger message) return message.modpow(e, n); public BigInteger decrypt(biginteger message) return message.modpow(d, n); public BigInteger[] encrypt(byte[] pmsg, boolean ds) BigInteger[] retorno = frombyte(pmsg); for (int i = 0; i < retorno.length; i++) if (!ds) retorno[i] = this.encrypt(retorno[i]); else retorno[i] = this.decrypt(retorno[i]); return retorno;
14 public byte[] decrypt(biginteger[] pciphertext, int ptam, boolean ds) for (int i = 0; i < pciphertext.length; i++) if (!ds) pciphertext[i] = this.decrypt(pciphertext[i]); else pciphertext[i] = this.encrypt(pciphertext[i]); return frombiginteger(pciphertext, ptam); public static byte[] frombiginteger(biginteger[] pbiginteger, int ptam) byte[] retorno = new byte[ptam]; int inicio = 0; byte[] temp = new byte[10]; for (int i = 0; i < pbiginteger.length; i++) temp = pbiginteger[i].tobytearray(); for (int j = 0; j < temp.length; j++) if (inicio < ptam) retorno[inicio++] = temp[j]; return retorno; public static BigInteger[] frombyte(byte[] pbyte) int tam = pbyte.length / 10; if (pbyte.length%10!= 0) tam++; //Cria o array de retorno BigInteger[] retorno = new BigInteger[tam]; int inicio = 0; byte[] temp = new byte[10]; for (int i = 0; i < tam; i++) for (int j = inicio; j < Math.min(inicio+10, pbyte.length); j++) temp[j inicio] = pbyte[j]; inicio += 10; if (pbyte.length < inicio)
15 temp = trim(temp, inicio pbyte.length); retorno[i] = new BigInteger(temp); return retorno; public static byte[] trim(byte[] parg, int pint) byte[] retorno = new byte [parg.length pint]; for (int i = 0; i < parg.length pint; i++) retorno [i] = parg[i]; return retorno;
Aula Prática - Criptografia. MD5 hash de 128 bits = 16 bytes muito utilizado por softwares com protocolo P2P, verificação de integridade e logins.
Redes de Computadores Unioeste Prof. Luiz Antonio 1. Algoritmos MD5 e SHA-1 Aula Prática - Criptografia MD5 hash de 128 bits = 16 bytes muito utilizado por softwares com protocolo P2P, verificação de integridade
Leia maisOrientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Leia maisSegurança da Informação
INF-108 Segurança da Informação Autenticação Prof. João Henrique Kleinschmidt Santo André, junho de 2013 Resumos de mensagem (hash) Algoritmo Hash são usados quando a autenticação é necessária, mas o sigilo,
Leia maisDEFINIÇÃO DE MÉTODOS
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 2 DEFINIÇÃO DE MÉTODOS Todo o processamento que um programa Java faz está definido dentro dos
Leia maisJSP - ORIENTADO A OBJETOS
JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...
Leia maisIntrodução a Java. Hélder Nunes
Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais
Leia maisJava. Marcio de Carvalho Victorino www.dominandoti.eng.br
Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a
Leia maisCriptografia e Segurança em Redes Capítulo 9. Quarta Edição William Stallings
Criptografia e Segurança em Redes Capítulo 9 Quarta Edição William Stallings Capítulo 9 - Public Key Cryptography e RSA Cada egípicio recebia dois nomes que eram conhecidos respectivamente como o nome
Leia maisProf. Roberto Franciscatto 4º Semestre - TSI - CAFW. Free Powerpoint Templates Page 1
Segurança na Web Cap. 4: Protocolos de Segurança Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW Page 1 é definido como um procedimento seguro para se regular a transmissão de dados entre computadores
Leia maisImplementação de Classe e Auto-Relacionamento em Java
UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Implementação de Classe e Auto-Relacionamento em Java 1)Introdução Um modelo de Diagrama de Classes representa a estrutura definida
Leia maisLinguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em
Leia maisImplementando uma Classe e Criando Objetos a partir dela
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe
Leia maisEXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS
Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor
Leia maisCURSO DE PROGRAMAÇÃO EM JAVA
CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro
Leia maisOrientação a Objetos
Orientação a Objetos 1. Sobrecarga (Overloading) Os clientes dos bancos costumam consultar periodicamente informações relativas às suas contas. Geralmente, essas informações são obtidas através de extratos.
Leia maisSuporte ao Desenvolvedor: 0800 770 332 0 www.desenvolvedoresdaruma.com.br. STK (Start Kit DARUMA)
STK (Start Kit DARUMA) Assiando os arquivos com a DarumaFramework.dll Versão 1.0 Premissas: 1. Ter impressora de modelo FS600/ FS2100T (de versão 01.05.00 ou superior), FS700 ou MACH. 2. DarumaFramework.dll
Leia maisMemória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos
TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br
Leia maisPROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem
Leia mais2 Orientação a objetos na prática
2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos
Leia maisTRABALHO BIBLIOTECA MD5
FACULDADE DE TECNOLOGIA SENAC PELOTAS TRABALHO BIBLIOTECA MD5 Linguagens de Programação Eduardo Orestes Brum Análise e Desenvolvimento de Sistemas - 2013 Sumário 1 Introdução 31 2 Criptografia MD5 4 2.
Leia maisI Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA
I Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA OBJETIVO Conhecer aspectos básicos do uso da criptografia como instrumento da SIC.. Abelardo Vieira Cavalcante Filho Assistente Técnico
Leia mais¹CPTL/UFMS, Três Lagoas, MS,Brasil, oliveiralimarafael@hotmail.com. ²CPTL/UFMS, Três Lagoas, MS, Brasil.
Encontro de Ensino, Pesquisa e Extensão, Presidente Prudente, 22 a 25 de outubro, 2012 36 INTRODUÇÃO A CRIPTOGRAFIA RSA Rafael Lima Oliveira¹, Prof. Dr. Fernando Pereira de Souza². ¹CPTL/UFMS, Três Lagoas,
Leia maisSegurança na Web. Programação para a Internet. Prof. Vilson Heck Junior
Segurança na Web Programação para a Internet Prof. Vilson Heck Junior Males São inúmeros os males existentes no universo online: Vírus; Trojan; Spyware; Adware; Invasão; Keyloggers; Phishing; Golpes; Spam;
Leia mais2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}
2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II Exercício : Construtores são métodos especiais sem tipo de retorno (nem mesmo void) e de mesmo nome que a classe que são invocados quando da criação
Leia maisSUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2
Leia maisComandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }
Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver
Leia maisProgramação de Computadores - I. Profª Beatriz Profº Israel
Programação de Computadores - I Profª Beatriz Profº Israel Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo
Leia maisARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
Leia maisMA14 - Aritmética Unidade 24 Resumo
MA14 - Aritmética Unidade 24 Resumo Introdução à Criptografia Abramo Hefez PROFMAT - SBM Aviso Este material é apenas um resumo de parte do conteúdo da disciplina e o seu estudo não garante o domínio do
Leia maisATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS
ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o
Leia maisNoções sobre Objetos e Classes
Noções sobre Objetos e Classes Prof. Marcelo Cohen 1. Elementos de programação Revisão de programação variáveis, tipos de dados expressões e operadores cadeias de caracteres escopo de variáveis Revisão
Leia maisPROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor
Leia maisÁlgebra A - Aula 11 RSA
Álgebra A - Aula 11 RSA Elaine Pimentel Departamento de Matemática, UFMG, Brazil 2 o Semestre - 2010 Criptografia RSA- pré-codificação Converter a mensagem em uma seqüência de números pré-codificação.
Leia maisQuestionário de Estudo - P1 Criptografia
Questionário de Estudo - P1 Criptografia 1) A criptografia e a criptoanálise são dois ramos da criptologia. Qual a diferença entre essas duas artes? Enquanto a Criptografia é a arte de esconder dados e
Leia maisPara desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.
1 - Criando uma classe em Java Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans. Antes de criarmos a(s) classe(s) é necessário criar o projeto
Leia maisPONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas CMP1132 Processo e qualidade de software II Prof. Me. Elias Ferreira Sala: 402 E Quarta-Feira:
Leia maisINSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO
Leia maisProfº. Enrique Pimentel Leite de Oliveira
Profº. Enrique Pimentel Leite de Oliveira O termo orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam
Leia maisProva de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)
Prova de Java 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos) O programa consiste em uma aplicação que simula o comportamento de dois
Leia maisProgramação Orientada a Objeto
Programação Orientada a Objeto Classes, Atributos, Métodos e Objetos Programação de Computadores II Professor: Edwar Saliba Júnior 1) Java é uma linguagem orientada a objetos. Para que possamos fazer uso
Leia maisAULA 4 VISÃO BÁSICA DE CLASSES EM PHP
AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.
Leia maisRelacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos
Programação Orientada a Objetos Relacionamentos entre objetos Associação, composição e agregação Construtores e sobrecarga Variáveis de classe e de instância Reinaldo Gomes reinaldo@cefet-al.br Objetos
Leia maisUnidade IV: Ponteiros, Referências e Arrays
Programação com OO Acesso em Java a BD Curso: Técnico em Informática Campus: Ipanguaçu José Maria Monteiro Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento Clayton Maciel de Informática
Leia maisSHA(SECURE HASH ALGORITHM - ALGORITMO HASH SEGURO) BRUNO KAMINO YAMAMOTO ALEXANDRE FLEURY
SHA(SECURE HASH ALGORITHM - ALGORITMO HASH SEGURO) BRUNO KAMINO YAMAMOTO ALEXANDRE FLEURY TIPOS DO ALGORITMO SHA SHA-0: Uma sigla dada a versão original do algoritmo, porém se tornou obsoleta por causa
Leia maisBC0501 Linguagens de Programação
BC0501 Linguagens de Programação Aula Prática: 03 Assunto: Comandos de Seleção 1. Introdução Um comando de seleção define uma condição em um programa, que permite que grupos de comandos sejam executados
Leia maisLINGUAGEM ORIENTADA A OBJETOS
LINGUAGEM ORIENTADA A OBJETOS TI MÓDULO II O ECLIPSE O eclipse é uma IDE Open Source (código fonte aberto) que serve para o desenvolvimento em muitas linguagens: PHP Java Python HTML C/C++ A IDE Eclipse
Leia maisAnálise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem
Leia maisIntrodução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
Leia maisExercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.
Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.x = x; this.y = y; public String tostring(){ return "(" + x + "," +
Leia maisUNIVERSIDADE FEDERAL DO PARANÁ
CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 05 APRESENTAÇÃO: Nesta aula vamos ver como se faz a criação de Métodos
Leia maisProgramação de Computadores - I. Profª Beatriz Profº Israel
Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem
Leia maisAuditoria e Segurança de Sistemas Aula 09 Criptografia. Felipe S. L. G. Duarte Felipelageduarte+fatece@gmail.com
Auditoria e Segurança de Sistemas Aula 09 Criptografia Felipe S. L. G. Duarte Felipelageduarte+fatece@gmail.com Criptologia Esteganografia Criptografia Criptanálise Cifragem Chaves Assimétrica Chaves Simétrica
Leia maisDisplay de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos
TUTORIAL Display de 7 Segmentos Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br
Leia maisAuditoria e Segurança da Informação GSI536. Prof. Rodrigo Sanches Miani FACOM/UFU
Auditoria e Segurança da Informação GSI536 Prof. Rodrigo Sanches Miani FACOM/UFU Revisão Criptografia de chave simétrica; Criptografia de chave pública; Modelo híbrido de criptografia. Criptografia Definições
Leia maisComputação II Orientação a Objetos
Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Introdução Esse não é um curso de Java! O objetivo é aprender os conceitos da programação orientada a objetos,
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-3 Criando Classes em Java Prof. Esbel Tomás Valero Orellana Da Aula Anterior Classes em Java, sintaxe básica Tipos básicos de dados em Java, como escolher o tipo apropriado
Leia maisTécnicas de Programação II
Técnicas de Programação II Aula 06 Orientação a Objetos e Classes Edirlei Soares de Lima Orientação a Objetos O ser humano se relaciona com o mundo através do conceito de objetos.
Leia maisPROGRAMANDO EM C# ORIENTADO A OBJETOS
PROGRAMANDO EM C# ORIENTADO A OBJETOS AGENDA MÓDULO 2 Domínio e Aplicação Objetos, Atributos e Métodos Classes em C# Criando Objetos em C# Referências em C# Manipulando Atributos Valores Padrão Exercícios
Leia maisCriptografia e Chave Pública. Segurança da Informação
Criptografia e Chave Pública Segurança da Informação Ementa Visão Global O que é? Criptografia está em todo lugar; Técnicas Primitivas de Cifragem; Outras técnicas de criptografia; Criptografia Moderna;
Leia mais3 Classes e instanciação de objectos (em Java)
3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem
Leia maisConceitos básicos da linguagem C
Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por
Leia maisDisciplina: Unidade III: Prof.: E-mail: Período:
Encontro 08 Disciplina: Sistemas de Banco de Dados Unidade III: Modelagem Lógico de Dados Prof.: Mario Filho E-mail: pro@mariofilho.com.br Período: 5º. SIG - ADM Relembrando... Necessidade de Dados Projeto
Leia maisAnálise e Projeto Orientados por Objetos
Análise e Projeto Orientados por Objetos Aula 01 Orientação a Objetos Edirlei Soares de Lima Paradigmas de Programação Um paradigma de programação consiste na filosofia adotada na
Leia maisPratica JFlex. Prática criando o primeiro analisador léxico
UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE CURSO: CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMPILADORES PROFESSOR: JOHNI DOUGLAS MARANGON Pratica JFlex JFlex é uma ferramenta que permite
Leia maisArquitetura de Rede de Computadores
TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador
Leia maisUniversidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação
UNIFEI Disciplina Professor Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação Enzo Seraphim 1 Padrões de Operação
Leia maisCONVENÇÃO DE CÓDIGO JAVA
CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2
Leia maisLP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br
LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de
Leia mais2. Representação Numérica
2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos
Leia maisfonte: http://www.nit10.com.br/dicas_tutoriais_ver.php?id=68&pg=0
Entenda o que é um certificado digital SSL (OPENSSL) fonte: http://www.nit10.com.br/dicas_tutoriais_ver.php?id=68&pg=0 1. O que é "Certificado Digital"? É um documento criptografado que contém informações
Leia maisAlgoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões
Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal
Leia maisAssinatura Digital: problema
Assinatura Digital Assinatura Digital Assinatura Digital: problema A autenticidade de muitos documentos, é determinada pela presença de uma assinatura autorizada. Para que os sistemas de mensagens computacionais
Leia maisRoteiro do Programa e Entrada/Saída
Roteiro do Programa e Entrada/Saída c Professores de ALPRO I Faculdade de Informática PUCRS 03/2012 ALPRO I (FACIN) Roteiro do Programa e E/S 03/2012 1 / 32 Sumário 1 Relembrando 2 Programa Definição de
Leia maisProgramação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.
Classes Abstratas Técnico em Informática, M.Sc. Classes Abstratas 2 Classes Abstratas Abstração Devemos considerar as qualidades e comportamentos independentes dos objetos a que pertencem, isolamos seus
Leia maisProgramação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP
Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente
Leia maisSistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica
Sistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA
Leia maisProgramação Orientada a Objetos em Java
Programação Orientada a Objetos em Java Rone Ilídio da Silva Universidade Federal de São João del-rei Campus Alto Paraopeba 1:14 1 Objetivo Apresentar os principais conceitos de Programção Orientada a
Leia maisAlgoritmos criptográficos de chave pública
Algoritmos criptográficos de chave pública Histórico - A descoberta em 1976 por Diffie, Hellman e Merkle de algoritmos criptográficos assimétricos, onde a segurança se baseia nas dificuldades de 1. Deduzir
Leia maisUnidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01
Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01 Objetivos: Modelar um sistema orientado a objetos simples a partir
Leia maisReuso com Herança a e Composiçã
Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:
Leia maisProf. Jhonatan Fernando
Prof. Jhonatan Fernando Métodos Programação OO Instâncias de variáveis (objetos) Mensagens Classes Herança Polimorfismo Encapsulamento Abstração Programação Estruturada Procedimentos e funções Variáveis
Leia maisALGORITMOS PARTE 01. Fabricio de Sousa Pinto
ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3
Leia maisA lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.
INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,
Leia maisPolimorfismo. Prof. Leonardo Barreto Campos 1
Polimorfismo Prof. Leonardo Barreto Campos 1 Sumário Introdução; Polimorfismo; Polimorfismo Java; Métodos Abstratos Java Classes Abstratas Java Exercício - Java Polimorfismo C++ Classe Abstrata C++; Funções
Leia maisJava 2 Standard Edition Como criar classes e objetos
Java 2 Standard Edition Como criar classes e objetos Helder da Rocha www.argonavis.com.br 1 Assuntos abordados Este módulo explora detalhes da construção de classes e objetos Construtores Implicações da
Leia mais