13/07: Disponíveis notas de GSI/PSC (secção de Avaliação).
15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação).
03/03: Disponíveis notas finais do módulo de CSI.
07/02: Data/Hora do teste de CSSI -- 10/02/2009 às 16:00.
12/01: As apresentações de PI de 3ª (13/01) terão início às 14:30.
12/01: Disponível avaliação prática de CSI.
19/12: As entregas/apresentações dos segundos projectos de PI ficam marcadas para o dia 13 de Janeiro pelas 14:00.
19/12: As aulas de reposição do módulo de SSI serão no dia 6 de Janeiro às 14:00.
10/11: Nova versão dos slides de técnicas criptográficas.
21/10: Já está disponível a primeira parte dos apontamentos do módulo de técnicas criptográficas.
05/10: A aula de TC no dia 07/10 começa somente às 10:00.
03/02/2009: Já estão disponíveis as notas do teste.
12/01/2009: Já está disponível a avaliação prática da disciplina.
30/12/2008: Sessão de defesa dos trabalhos será a 06/01/2009, pelas 10:00. A data limite para entrega (por email) é às 0:00 de 05/01/2009.
24/09/2008: Versão recomendada do Eclipse: Eclipse IDE for Java EE Developers (162 MB)
Já estão disponíveis as notas do exame de recurso -- ManuelBernardoBarbosa - 23 Fev 2006
Para consultar os exames, contactar docente na segunda feira dia 6 de Fevereiro entre as 14 e as 15 horas. -- ManuelBernardoBarbosa - 2 Fev 2006
Já estão disponíveis as notas do exame da 2a Chamada. -- ManuelBernardoBarbosa - 31 Jan 2006
Já estão disponíveis as notas do exame da 1a Chamada. -- ManuelBernardoBarbosa - 16 Jan 2006
As entregas dos trabalhos práticos terão lugar na 6a Feira dia 6 de Janeiro. A partir de 3a Feira dia 27 de Dezembro estará disponível na recepção do DI uma folha de inscrições. Cada docente receberá os trabalhos dos alunos do seu turno (em caso de grupos mistos é indiferente).
Já estão disponíveis as notas do exame da época especial. -- ManuelBernardoBarbosa - 13 Nov 2005
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da tarde. -- ManuelBernardoBarbosa - 19 Jan 2005
Está já disponível o material de apoio ao trabalho prático. -- ManuelBernardoBarbosa - 9 Nov 2004
22-02-2008 Já estão disponíveis as notas do exame de recurso.
DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2-105).
28-01-2008 Já estão disponíveis as notas do 2º teste.
18-01-2008 A direcção de curso confirmou a data de 23-01-2008 (9:00, CP2111) para o teste de CA.
14-01-2008 Notas dos Mini-Projectos.
26-12-2007 Notas do teste intermédio.
27-11-2007 Já está disponível o enunciado do projecto prático.
20-11-2007 Estão disponíveis dois novos mini-projectos (aqui).
08-11-2007 O teste intermédio será no dia 13 de Novembro (3a-feira) às 17:00 - sala CP1206.
16-10-2007 Já está disponível o enunciado do primeiro mini-projecto (aqui).
16-10-2007 O teste intermédio será na semana de 12 a 17 de Novembro. O teste final na semana de 21 a 26 de Janeiro.
08-10-2007 As listas de inscritos nos turnos práticos encontram-se aqui.
20-09-2007 As notas da época especial estão disponíveis no site do ano anterior.
18-09-2007 Dado que ainda estão a decorrer exames de disciplinas de LESI, não haverá aula de CA hoje (18-09-2007).
Conceitos de Sistemas Criptográficos (T) - Sumários
MI-CSSI (2008/2009)
Aula 1 - 30/09/2008, 14:00 - 16:00
Apresentação do Módulo: programa, organização das aulas, critério de avaliação, referências bibliográficas.
Conceitos básicos e terminologia: criptografia, cripto-análise, segurança da informação. Breve apresentação das técnicas criptográficas modernas.
Aula 2 - 07/10/2008, 14:00 - 16:00
Cifras simétricas Sequenciais: características; cifras sequenciais síncronas e auto-sincronizáveis. Exemplos de cifras sequenciais: A5/1, RC4.
Cifras simétricas por Blocos: características; modos de operação (ECB, CBC, OFB, CFB, CTM).
Aula 3 - 14/10/2008, 14:00 - 16:00
Apresentação detalhada das cifras por Blocos DES e AES. Referência a técnicas cripto-análise.
Funções de Sentido Único: conceito e construções básicas. Funções de Hash Criptográficas: desenho e exemplos (MD5, SHA-1). Aplicações de funções de hash em geradores de números aleatórios; key generation functions.
Aula 4 - 21/10/2008, 14:00 - 16:00
Criptografia Assimétrica: motivação e apresentação do conceito. Protocolo de acordo de chaves Diffie-Hellman e análise de segurança perante adervesários passivos e activos. Cifras de Chave Pública e envelopes digitais. Assinaturas Digitais.
Aula 5 - 28/10/2008, 14:00 - 16:00
Algoritmos de criptografia assimétrica: problemas matemáticos utilizados na construção de funções de sentido único com segredo. Exemplos de algoritmos: RSA, El-Gamal, DSA.
Certificação e Public Key Infrastructure: estrutura dos cretificados X509; processo de pedido de certificados; utilização de certificados para assinatura digital e envelopes digitais; regogação (CRL). Esquemas alternativos/complementares de certificação (certificados de atributos; rede de confiança PGP; SPKI/SDSI).
O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento Java que será utilizado durante o curso.
Como actividade de programação (para experimentar o ambiente escolhido), deve desenvolver uma pequena aplicação que leia um ficheiro de texto (nome do ficheiro passado como argumento), e escreva para stdout o seu conteúdo com todas as letras maiúsculas.
Aula 2 - 07/10/2008, 16:00 - 18:00
Cifra de ficheiro utilizando JCA/JCE
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. AES no modo CBC). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma cifra mais simples (e.g. RC4) e uma chave secreta fixa definida no código na forma de um array de bytes (i.e. implementar somente as opções -enc e -dec). Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
Um segundo passo deverá consistir na implementação da opção -genkey. Aí surge o problema de guardar a chave no sistema de ficheiros: vamos começar por adoptar a solução mais simples (e insegura) - guardar a chave directamente num ficheiro.
Por último, iremos guardar a chave num contentor apropriado (protegido por uma password). Para tal devemos utilizar uma KeyStore disponibilizada pela JCA que permita o armazenamento de chaves secretas (tipo "JCEKS" ou "PKCS12").
Pretende-se adaptar a aplicação desenvolvida para responder aos seguintes requisitos:
O objectivo é fazer uso da aplicação para cifrar um conjunto de ficheiros (potencialmente grandes);
A chave utilizada nessas operações de cifra deve estar devidamente protegida;
Se algum dos ficheiros cifrados for manipulado (alterado), o programa deverá detectar essa ocorrência ao decifrar.
Aula 4 - 21/10/2008, 16:00 - 18:00
Acordo de Chaves
As classes Cliente, Servidor e TServidor implementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Para o efeito, deverá considerar a cifra/modo que considerar mais apropriado.
Estabelecer o segredo através da execução do protocolo de acordo de chaves Diffie-Hellman. Para o efeito deverá utilizar:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
(obs.: No JCA Reference Guide está disponível um exemplo com a codificação do protocolo Diffie-Hellman.)
Algumas classes relevantes:
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade análoga à do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas:
Alice -> Bob : g^x
Alice <- Bob : g^y, SB(g^x, g^y)
Alice -> Bob : SA(g^x, g^y)
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Segurança de Sistemas Informáticos (SSI) - 1º Semestre
Tópicos de programação segura com ênfase no dimensionamento de privilégios, protecção de dados, stack e sandbox de execução.
Técnicas, ferramentas e boas práticas de administração na operação segura de sistemas informáticos.
Perímetros de segurança como elementos estruturantes na no comparticionamento de acesso e protecção dos recursos do sistema.
Redundância, fail-over, salvaguarda e reposição de dados e serviços como técnicas para melhoria da disponibilidade e segurança de operação de sistemas informáticos.
Análise forense aplicada à detecção e avaliação de situações de comprometimento de segurança de sistemas.
Introdução às primitivas, esquemas e protocolos criptográficos mais relevantes como blocos construtivos de funcionalidades de segurança em sistemas informáticos.
Certificação digital e a utilização de Infrastruturas de Chave Pública.
Aplicações correntes/comerciais da criptografia.
Projecto Integrado - 1º e 2º Semestres
Seminário/Gestão da Segurança da Informação (Sem+GSI) - 1º e 2º Semestres
Aspectos legais da segurança da informação.
Privacidade e protecção de dados pessoais.
Gestão da confiança.
Auditoria e acreditação de segurança.
Técnicas Criptográficas - 2º Semestre
Noções fundamentais da criptografia: computabilidade, conhecimento e aleatoriedade, confiança e provas probabilísticas.
Teoria matemática básica: estruturas algébricas relevantes e teoria dos números.
Primitivas criptográficas: cifras e sua criptoanálise, sistemas de chave pública, sistemas orientados à identidade.
Esquemas criptográficos: modelos e provas de segurança.
Paradigmas de Sistemas Confiáveis - 2º Semestre
Modelos de faltas
Coordenação distribuída
Paradigma transaccional
Comunicação em grupo fiável
Replicação por software
Critério de Avaliação
A avaliação final da UCE é composta pelas seguintes componentes (todas com nota mínima de 10 valores):
Teste escrito (60%)
Avaliação do Projecto (30%)
Seminário (10%)
Teste escrito
No final de cada periodo lectivo (semestre) é realizado um teste escrito. Esses testes são divididos em duas partes, versando cada uma delas os conteúdos dos módulos leccionados. No final do ano é oferecida a possibilidade de realizar um exame de recurso, podendo aí o aluno escolher que componentes (módulos) pretende repetir.
Teste do 1º Semestre (AS+CSI)
Teste do 2º Semestre (TC+PSC)
Exame Recurso (AS+CSI+TC+PSC)
Projecto Integrador
A avaliação do Projecto Integrador é realizada em dois tempos:
Final do primeiro semestre;
Final do ano.
A apresentação do projecto será acompanhada por um relatório
Apontadores WEB com material de Referência e Tutorials.
Transcreva para o editor do Eclipse, compile e execute o seguinte programa:
/**
* The HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
Leia a secção do Java Tutorial referente a este exemplo. Consulte também a documentação referente ao método println (a que classe pertence?).
Para se realizarem programas minimamente interessantes, é necessário conhecer um conjunto básico de conceitos e de classes da biblioteca standard (secções Learning the Java Language e Essential Java Classes)
Aula 3: 02/10/2008
Pretende-se realizar uma pequena aplicação java com a seguinte funcionalidade:
O utilizador, ao invocar o programa, passa também como argumento um nome de um ficheiro de texto fich;
O programa deverá gravar um novo ficheiro fich.out em que converte todas as letras minúsculas em maiúsculas;
No final, deverá imprimir no écran o número total de caracteres e linhas processadas.
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. RC4). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma chave secreta fixa, definida no código na forma de um array de bytes. Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
Jornadas de Engenharia Biomédica. (tolerância de ponto)
Aula 6: 23/10/2008
Continuação da aula de "Cifra de Ficheiro".
Aula 7: 30/10/2008
As classes Cliente, Servidor e TServidor implementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Pretende-se nesta aula modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Escolha para o efeito a cifra/modo que considerar mais apropriado.
Algumas classes relevantes:
O objectivo desta aula é implementar o acordo de chaves Diffie-Hellman directamente em Java (sem recorrer ao framework JCA).
Alice,Bob: acordam nos parâmetros P e G
Alice: gera x tal que 0 ≤ x < P
Alice -> Bob : G^x mod P
Bob: gera y tal que 0≤ y < P
Bob -> Alice : G^y mod P
Alice, Bob: segredo acordado K = G^(xy) mod P = (G^x)^y mod P = (G^y)^x mod P
Utilize a classe BigInteger e codifique cada passo do protocolo explicitamente. Pode começar por utilizar os seguintes parâmetros para o grupo (P tem 1024 bit):
P = 99494096650139337106186933977618513974146274831566768179581759037259788798151499814653951492724365471316253651463342255785311748602922458795201382445323499931625451272600173180136123245441204133515800495917242011863558721723303661523372572477211620144038809673692512025566673746993593384600667047373692203583
G = 44157404837960328768872680677686802650999163226766694797650810379076416463147265401084491113667624054557335394761604876882446924929840681990106974314935015501571333024773172440352475358750668213444607353872754650805031912866692119819377041901642732455911509867728218394542745330014071040326856846990119719675
(obs: só para quem acabou o programa pedido na aula anterior...)
Pretende-se codificar uma nova versão do protocolo de acordo de chaves Diffie-Hellman que faça exclusivamente uso das funcionalidades oferecidas pela JCA, nomeadamente:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
Em JCE Reference Guide está disponível um exemplo de codificação desse protocolo.
APIs:
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade análoga à do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas:
Alice -> Bob : g^x
Alice <- Bob : g^y, SB(g^x, g^y)
Alice -> Bob : SA(g^x, g^y)
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Utilização de certificados X509 em Java
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.pk8
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.pk8
Certificado auto-assinado da autoridade de certificação: ca.crt
A utilização de certificados pressupõe a sua validação. O Java disponibiliza uma API específica que deverá utilizar para o efeito (documentação abaixo). Para facilitar esse estudo recomenda-se o estudo/adaptação de um programa de exemplo que verifica a validade de uma cadeia de certificação: ValidateCertPath.java. Utilizando esse programa, podemos verificar a validade do certificado do servidor através da linha de comando:
java ValidateCertPath ca.crt servidor.crt
Uma segunda questão que surgirá neste trabalho é a manipulação dos formatos das chaves: as chaves privadas correspondentes aos certificados fornecidos estão codificadas num formato standard PKCS8. Para se converter esse formato num objecto Java apropriado terá de se utilizar uma instância da classe KeyFactory. O fragmento de código que se apresenta ilustra esse processo:
byte[] encodedKey; // read from file
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encodedKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey privKey =
(RSAPrivateKey)keyFactory.generatePrivate(keySpec);
Geração de Certificados X509
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
openssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da tarde. -- ManuelBernardoBarbosa - 19 Jan 2005
Está já disponível o material de apoio ao trabalho prático. -- ManuelBernardoBarbosa - 9 Nov 2004
Já estão disponíveis as notas do exame de recurso -- ManuelBernardoBarbosa - 23 Fev 2006
Para consultar os exames, contactar docente na segunda feira dia 6 de Fevereiro entre as 14 e as 15 horas. -- ManuelBernardoBarbosa - 2 Fev 2006
Já estão disponíveis as notas do exame da 2a Chamada. -- ManuelBernardoBarbosa - 31 Jan 2006
Já estão disponíveis as notas do exame da 1a Chamada. -- ManuelBernardoBarbosa - 16 Jan 2006
As entregas dos trabalhos práticos terão lugar na 6a Feira dia 6 de Janeiro. A partir de 3a Feira dia 27 de Dezembro estará disponível na recepção do DI uma folha de inscrições. Cada docente receberá os trabalhos dos alunos do seu turno (em caso de grupos mistos é indiferente).
Já estão disponíveis as notas do exame da época especial. -- ManuelBernardoBarbosa - 13 Nov 2005
Introdução ao conceito de Zero-Knowledge para identificação e explicação da segurança do protocolo Schnorr: capítulo 10 do livro "Handbook of Applied Cryptography", disponível aqui.
Propriedades das funções de hash e a relação com ataques por força bruta e birthday attacks: wikipedia aqui.
22-02-2008 Já estão disponíveis as notas do exame de recurso.
DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2-105).
28-01-2008 Já estão disponíveis as notas do 2º teste.
18-01-2008 A direcção de curso confirmou a data de 23-01-2008 (9:00, CP2111) para o teste de CA.
14-01-2008 Notas dos Mini-Projectos.
26-12-2007 Notas do teste intermédio.
27-11-2007 Já está disponível o enunciado do projecto prático.
20-11-2007 Estão disponíveis dois novos mini-projectos (aqui).
08-11-2007 O teste intermédio será no dia 13 de Novembro (3a-feira) às 17:00 - sala CP1206.
16-10-2007 Já está disponível o enunciado do primeiro mini-projecto (aqui).
16-10-2007 O teste intermédio será na semana de 12 a 17 de Novembro. O teste final na semana de 21 a 26 de Janeiro.
08-10-2007 As listas de inscritos nos turnos práticos encontram-se aqui.
20-09-2007 As notas da época especial estão disponíveis no site do ano anterior.
18-09-2007 Dado que ainda estão a decorrer exames de disciplinas de LESI, não haverá aula de CA hoje (18-09-2007).
Certificados de Chave Pública e Public Key Infrastructure.
Aplicações correntes/comerciais da Criptografia.
Utilização de dispositivos criptográficos portáteis.
Aplicar estes conhecimentos na implementação de sistemas seguros.
Pré-Requisitos
Não havendo pré-requisitos formais, assume-se que os alunos possuem o seguinte conjunto de conhecimentos:
familiaridade com a linguagem JAVA
Critérios de Avaliação
Nota final
Teste Escrito: 60% (nota mínima de 8 valores)
Componente Prática: 40% (opcional, mas a ausência de avaliação prática limita a nota final a 12 valores)
Teste Escrito:
Serão realizados dois testes ao longo do semestre (datas a confirmar):
1º em meados de Novembro (13 de Novembro, às 17:00 - sala CP1206);
2º na época de testes no final do semestre (semana de 21 a 26 de Janeiro).
O exame de recurso compreende toda a matéria.
Avaliação prática
A componente prática da nota resulta da avalição de um ou mais trabalhos práticos. Os alunos podem optar por:
Realizar dois pequenos projectos durante o semestre (serão propostos pelo menos 4 temas). Os prazos serão fixados aquando do anúncio de cada projecto (tipicamente de 1 ou 2 semanas) e a sua defesa será realizada nas aulas práticas.
Um projecto de maior dimensão realizado por grupos de até 3 alunos, onde se pode fazer uso das componentes realizadas durante as aulas práticas. Será entregue e defendido no final do semestre.
Em qualquer uma das modalidades, a entrega consistirá no código desenvolvido e num pequeno relatório do trabalho efectuado.
Programa Resumido
Teórica
Introdução e Terminologia
Criptografia, Criptoanálise e Criptologia
Conceitos de cifra, chave e comunicação segura
Classificação de Ataques
Apresentação de Técnicas Criptográficas
Técnicas Criptográficas
Cifras simétricas (sequenciais e por blocos)
Funções de Hash e Message Authentication Codes
Distribuição e acordo de chaves
Cifras assimétricas e Criptografia de Chave Pública
Projecto 4: Site para intranet com autenticação baseada em Certificados X509
Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro de 2008)
Pretende-se configurar um servidor web para uma intranet de uma instituição. Os requisitos são:
O site irá disponibilizar diferentes áreas para os vários departamentos da instituição. Em cada uma dessas áreas existirão zonas de acesso público e restritas a utilizadores autenticados (do departamento em questão).
Admite-se que cada departamento dispõe de uma CA própria (mas estas não se encontram necessariamente hierarquizadas).
Para certas zonas do site, podem ainda existir critérios de acesso mais restritivos (e.g. só determinados utilizadores podem aceder).
O trabalho consistirá na configuração do web-server para uma instanciação do cenário proposto. Em particular, é parte integrante deste trabalho a geração dos certificados envolvidos (para os diferentes departamentos). No relatório deverão destacar os pontos mais relevantes do desenvolvimento (e.g. fragmentos das scripts de configuração; etc.)
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email. A demonstração ocorrerá na aula prática no próprio dia da entrega (obs: para utilizar os computadores do laboratório terá de instalar no momento todo o software necessário. O mais simples será trazer um portátil com o software já instalado).
Projecto 3: Codificação de esquemas de cifra ou assinatura aleatórios baseados no RSA.
Prazo: 2 semanas (entregue na aula do dia 4 de Dezembro)
Do ponto de vista de segurança, recomenda-se que a utilização de esquemas criptográficos baseados no RSA considerem elementos aleatórios na produção da cifra/assinatura. Exemplos desses esquemas são o RSA-OAEP (cifra) e RSA-PSS (assinatura). Pretende-se neste projecto realizar a codificação de um destes esquemas (à sua escolha) em Java. Para tal deverá seguir a especificação apresentada em PKCS1-v2.1.
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Projecto 2: Construção das tabelas características das S-box do DES.
Prazo: 2 semanas (entregue na aula do dia 4 de Dezembro)
Desenvolver um programa que gere as tabelas características das S-box do DES (utilizadas na cripto-análise diferencial). Recorde-se que essas tabelas registam:
Para cada S-box, qual o número de resultados com uma dada diferença em função das diferenças das entradas (tabela como a apresentada nos slides das teóricas);
Para uma S-box, e determinadas diferenças na entrada e na saída, quais os pares de entrada e saída que são contabilizadas na posição respectiva da tabela anterior.
Sugestão: adapte uma implementação do DES (aí já dispõe da codificação das várias S-box).
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Projecto 1: Abstracção para comunicação com garantias de integridade
Prazo: 1 semana (entregue na aula do dia 23 de Outubro)
Pretende-se desenvolver classes que suportem abstracções análogas à CipherInputStream/CipherOutputStream, mas cuja garantia associada seja a integridade e não a confidencialidade.
Deverá ser escrito um pequeno relatório (4/5 folhas) que discuta as decisões de implementação adoptadas e apresentado um pequeno programa que ilustre a utilização das classes.
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Lista de Alunos:
Pretende-se construir uma plataforma que permita a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Algumas classes relevantes:
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir dois pequenos programas Java: Um primeiro que cifra um ficheiro (e.g. texto_limpo.txt) por intermédio de uma cifra simétrica (e.g. cifra sequêncial RC4). Um segundo que decifra o criptograma obtido para recuperar o texto limpo.
Para simplificar vamos utilizar uma chave secreta fixa, definida no código na forma de um array de bytes, e convertida numa chave secreta adequada utilizando a classe SecretKeySpec.
É também interessante verificar que o criptograma gerado é compatível com outras plataformas que implementam a mesma cifra. O comando seguinte utiliza o openssl para decifrar um ficheiro cifrado com RC4 (a chave tem de ser fornecida em hexadecimal).
Pretende-se completar/modificar o código realizado nas aulas anteriores por forma a que o Cliente comunique de forma segura (confidêncial) com o Servidor. Para tal deve-se utilizar uma cifra por blocos (e.g. AES) num modo de funcionamento apropriado.
Observações:
A escolha do modo deve ser adequado à natureza da conexão entre o cliente e o servidor. Em particular, deve-se tomar em atenção as questões de buffering e sincronização...
Se se optar por uma Stream "interactiva", pode-se optar por CipherOutputStream e CipherInputStream com uma cifra num modo "sequêncial" (obs.: experimente utilizar um modo por blocos para ter percepção sobre os problemas dessa solução...)
Se optar por transmissão assíncrona de objectos, por optar por utilizar SealedObject sobre uma ObjectStream. Nesse caso pode utilizar um modo por blocos (e.g. CBC).
Em qualquer dos casos, terá sempre de tratar da inicialização e transmissão do Initialization Vector.
Estando nós a utilizar uma cifra simétrica, temos de garantir que cliente/servidor acordam na chave utilizada. Para simplificar, podemos admitir que guardamos a chave num ficheiro (gerada por um pequeno programa com base na funcionalidade da classe KeyGenerator) que é disponibilizado a ambos os programas. Adiante, dicutiremos formas mais apropriadas de estabelecer o acordo de chaves entre as partes...
Algumas classes relevantes (para além das já estudadas...):
Aula 4 - Canal seguro entre Cliente/Servidor (continuação)
Pretende-se:
(Se for o caso...) Concluir a implementação da aula anterior;
Implementar estratégia alternativa (CipherStream vs. SealedObject).
Aula 5 - Acordo de chaves Diffie-Hellman
O objectivo desta aula é adicionar à aplicação Cliente/Servidor suporte para o protocolo de acordo de chaves Diffie-Hellman. Para tal deverá ser conveniente estudar/adaptar o programa de exemplo apresentado em JCE Reference Guide (Appendix F).
Novas classes:
Aula 6 - Implementação do protocolo Station to Station
Pretende-se:
(Se for o caso...) Concluir a implementação da aula anterior (acordo de chaves Diffie Hellman);
Complementar o programa de acordo de chaves para incluir a funcionalidade do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma traca de assinaturas (cifrada com a chave de sessão negociada), i.e.:
Alice -> Bob : g^x
Alice <- Bob : g^y, EK(SB(g^y, g^x))
Alice -> Bob : EK(SA(g^x, g^y))
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Tendo já abordado os aspectos de confidencialidade e autenticidade na comunicação Cliente/Servidor, falta-nos considerar a integridade da mensagem transmitida (i.e. garantir que não é possível manipular/alterar a mensagem enquanto em trânsito). Para tal devemos fazer uso de (H)MACs (classe javax.crypto.Mac).
Obs.: Uma sugestão para integrar a utilização de MACs na aplicação existente consiste em seguir a estratégia adoptada em CipherStream ou SealedObject: a de encapsular a sua funcionalidade numa classe responsável pela comunicação...
Aula 8 - Utilização de Certificados em Java
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.der
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.der
Certificado auto-assinado da autoridade de certificação: ca.crt
Para facilitar o estudo da manipulação de certificados X509, disponibiliza-se um programa que verifica a validade de uma cadeia de certificação: ValidateCertPath.java.
Classes requeridas:
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
penssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento Java que será utilizado durante o curso.
Como actividade de programação (para experimentar o ambiente escolhido), deve desenvolver uma pequena aplicação que leia um ficheiro de texto (nome do ficheiro passado como argumento), e escreva para stdout o seu conteúdo com todas as letras maiúsculas.
Aula 2 - Cifra de ficheiro utilizando JCA/JCE
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. RC4). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma chave secreta fixa, definida no código na forma de um array de bytes. Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
É também interessante verificar que o criptograma gerado é compatível com outras plataformas que implementam a mesma cifra. O comando seguinte utiliza o openssl para decifrar um ficheiro cifrado com RC4 (a chave tem de ser fornecida em hexadecimal).
Aula 3 - Confidencialidade na comunicação Cliente-Servidor
As classes Cliente, Servidor e TServidorimplementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Pretende-se nesta aula modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Escolha para o efeito a cifra/modo que considerar mais apropriado.
Algumas classes relevantes:
Aula 4 - Confidencialidade na comunicação Cliente-Servidor (continuação)
Pretende-se nesta aula experimentar o impacto da escolha da cifra/modo na comunicação entre o cliente/servidor. Para tal é conveniente
reforçar a natureza interactiva da comunicação modificando os ciclos de leitura/escrita para operarem sobre um byte de cada vez:
Cliente:
CipherOutputStream cos = ...
int test;
while((test=System.in.read())!=-1) {
cos.write((byte)test);
cos.flush();
}
Servidor:
CipherInputStream cis = ...
int test;
while ((test=cis.read()) != -1) {
System.out.print((char) test);
}
Experimente agora as seguintes cifras (e modos) e verifique qual o respectivo impacto nas questões de buffering e sincronização:
RC4
AES/CBC/NoPadding
AES/CBC/PKCS5Padding
AES/CFB8/PKCS5Padding
AES/CFB8/NoPadding
AES/CFB/NoPadding
Procure explicar a diferenças detectadas na execução da aplicação.
Obs: Note que em muitos dos modos sugeridos necessita de considerar um IV. Considere para o efeito que o IV é gerado pelo cliente e enviado em claro para o servidor (no início da comunicação).
Algumas classes relevantes (para além das já estudadas...):
O objectivo desta aula é implementar o acordo de chaves Diffie-Hellman. Algumas sugestões para atacar o problema:
Comece por utilizar a classe BigInteger e codifique cada passo do protocolo explicitamente. Pode começar por utilizar os seguintes parâmetros para o grupo (P tem 1024 bit):
P = 99494096650139337106186933977618513974146274831566768179581759037259788798151499814653951492724365471316253651463342255785311748602922458795201382445323499931625451272600173180136123245441204133515800495917242011863558721723303661523372572477211620144038809673692512025566673746993593384600667047373692203583
G = 44157404837960328768872680677686802650999163226766694797650810379076416463147265401084491113667624054557335394761604876882446924929840681990106974314935015501571333024773172440352475358750668213444607353872754650805031912866692119819377041901642732455911509867728218394542745330014071040326856846990119719675
No JCA, podemos gerar valores apropriados para os parâmetros necessários através de uma instância apropriada da classe AlgorithmParameterGenerator.
Em vez de trabalharmos directamente com a classe BigInteger, pode-se fazer uso da classe KeyAgreement.
No JCE Reference Guide está disponível um exemplo de codificação do protocolo.
Aula 6 - Continuação da codificação do protocolo Diffie-Hellman
Nesta aula pretende-se concluir o protocolo de acordo de chaves Diffie-Hellman. Sugere-se que agora façam exclusivamente uso das funcionalidades oferecidas pela JCA, nomeadamente:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
Aula 8 - Codificação do protocolo Station-to-Station.
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas (cifrada com a chave de sessão negociada), i.e.:
Alice -> Bob : g^x
Alice <- Bob : g^y, EK(SB(g^y, g^x))
Alice -> Bob : EK(SA(g^x, g^y))
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.pk8
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.pk8
Certificado auto-assinado da autoridade de certificação: ca.crt
A utilização de certificados pressupõe a sua validação. O Java disponibiliza uma API específica que deverá utilizar para o efeito (documentação abaixo). Para facilitar esse estudo recomenda-se o estudo/adaptação de um programa de exemplo que verifica a validade de uma cadeia de certificação: ValidateCertPath.java. Utilizando esse programa, podemos verificar a validade do certificado do servidor através da linha de comando:
java ValidateCertPath ca.crt servidor.crt
Uma segunda questão que surgirá neste trabalho é a manipulação dos formatos das chaves: as chaves privadas correspondentes aos certificados fornecidos estão codificadas num formato standard PKCS8. Para se converter esse formato num objecto Java apropriado terá de se utilizar uma instância da classe KeyFactory. O fragmento de código que se apresenta ilustra esse processo:
byte[] encodedKey; // read from file
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encodedKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey privKey =
(RSAPrivateKey)keyFactory.generatePrivate(keySpec);
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
openssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
Conceitos Fundamentais: criptografia e criptoanálise; cifras, chaves e comunicação segura; cifras simétricas; distribuição e acordo de chaves; cifras assimétricas e criptografia de chave pública; assinaturas digitais e códigos de autenticação de mensagens; identificação.
Certificação e Infraestrutura de Chave Pública (PKI): certificados e CRLs; autoridades de registo; autoridades de certificação; cadeias e hierarquias de certificação; standards de criptografia de chave pública.
Aplicações e Protocolos Criptográficos: protocolos de sessão (SSL, SSH); segurança em correio electrónico (PGP, S/MIME); bases de dados seguras.
Bibliografia
Apontamentos da disciplina
Applied Cryptography: Protocols, Algorithms and Source Code in C, Bruce Schneier. John Wiley & Sons, 1995.
Cryptography: Theory and Practice, Douglas R. Stinson. CRC Press, 1995.
Descrevem-se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais do trabalho deverão ser desenvolvidas em Java, fazendo uso da framework JCA/JCE.
Os grupos são incentivados a fazerem uso dos programas de exemplo que tem vindo a ser desenvolvidos nas aulas teórico-práticas da disciplina. A data limite para a entrega do trabalho é 5 de Janeiro de 2009, devendo este ser enviado por email para o docente da disciplina, acompanhado por um relatório que documente as opções tomadas ao longo do seu desenvolvimento. A defesa do trabalho terá lugar no dia 9 de Janeiro de 2009, durante o horário lectivo da disciplina (10:00 - 13:00).
Projecto 1
O objectivo deste trabalho consiste em desenvolver uma aplicação de conversação (chat) segura.
O cenário considerado é uma organização contendo um conjunto bem definido de utilizadores (e.g. departamento de uma
empresa). Em termos da arquitectura do sistema, consideram-se as seguintes componentes:
Servidor: aplicação Java responsável por disponibilizar o serviço de chat;
Cliente: aplicação Java que possibilita o acesso dos utilizadores ao sistema;
CA: autoridade de certificação responsável pela emição dos certificados requeridos para o funcionamento das aplicações.
Em termos de funcionalidade, sugere-se:
A identidade dos utilizadores deverá ser assegurada por intermédio da utilização de certificados X509. A emissão dos certificados necessários é parte integrante do projecto. No entanto, não se impõe que essa componente seja realizada por uma aplicação Java desenvolvida especificamente para esse fim — pode-se fazer uso de ferramentas de domínio público como o openssl.
Um utilizador acede ao sistema através da aplicação cliente. Após apresentar as credenciais requeridas, terá acesso à “sala de conversação” onde poderá comunicar de forma segura com os utilizadores que se encontrem on-line.
(opcional) Construção de uma interface gráfica simples para os clientes.
(opcional) Um utilizador ligado ao sistema pode ainda solicitar uma conversação privada com um outro utilizador também disponível on-line. Nesse caso, e se o parceiro aceitar a comunicação, é estabelecida uma ligação segura entre eles.
(opcional) Deverá ser ainda possível a um utilizador enviar mensagens para serem lidas off-line por outros utilizadores. O servidor deverá assim gerir “caixas de correio” onde armazena as mensagens até que os destinatários se liguem ao sistema.
Em todas a comunicações estabelecidas deverão ser adoptados os requisitos de segurança sempre na perspectiva mais conservadora (e.g. um utilizador legítimo, se não estiver on-line, não deverá ser capaz de interceptar o conteúdo das mensagens trocadas na sala de conversação). A identificação clara dos requisitos de segurançaa, assim como escolhas fundamentada das técnicas criptográficas utilizadas, será dos aspectos mais valorizados na avaliação do trabalho.
Projecto 2
O objectivo deste projecto consiste em complementar o projecto desenvolvido no âmbito da disciplina de Sistemas Distribuídos para incorporar aspectos de segurança nos canais de comunicação envolvidos e no acesso aos recursos. Em particular, pretende-se
Utilizar o protocolo SSL em modo de autenticação mútua para os canais de comunicação:
Cliente(s) ↔ Servidor
Servidor ↔ motor de base de dados
A autenticação das várias entidades envolvidas deverá fazer uso de certificados X509. A emissão dos certificados necessários é parte integrante do projecto. No entanto, não se impõe que essa componente seja realizada por uma aplicação Java desenvolvida especificamente para esse fim — pode-se fazer uso de ferramentas de domínio público como o openssl.
(opcional) Construção de uma interface gráfica simples baseada em applets.
(opcional) Configuração de um servidor Web (onde se disponibiliza a applet) cujo controlo de acessos é regulado pelos mesmos certificados da aplicação.
(opcional) Avaliar como é que o(s) mecanismo(s) de autenticação do motor de base de dados se podem associar à autenticação com certificados X509 utilizados na comunicação X509.
Em todas a comunicações estabelecidas deverão ser adoptados os requisitos de segurança sempre na perspectiva mais conservadora. A identificação clara dos requisitos de segurançaa, assim como escolhas fundamentada das técnicas criptográficas utilizadas, será dos aspectos mais valorizados na avaliação do trabalho.
Sumário: Assinaturas digitais, identificação de agentes, protocolos de conhecimento zero, mecanismo desafio-resposta. -- ManuelBernardoBarbosa - 20 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Segurança teórica de cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 06 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 30 Mar 2006.
Sumário: Implementação de CBC a partir de ECB sobre openssl. Segurança teórica de cifras simétricas. -- ManuelBernardoBarbosa - 23 Mar 2006
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB -- ManuelBernardoBarbosa - 16 Mar 2006.
Sumário: Implementação em C de cifragem RC4. Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 9 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 2 Mar 2006.
Para consultar o exame da época especial, contactar o docente da disciplina. -- -- ManuelBernardoBarbosa - 20 Set 2007
Os exames de recurso poderão ser cunsultados na 5a feira dia 26 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 25 Jul 2007
O exame oral realizar-se-á na 2a feira, dia 9 de Julho, às 15:00, no Departamento de Informática em Gualtar/Braga. O aluno em questão deverá contactar o docente por e-mail, no caso da existência de algum impedimento à realização do exame oral nesta data. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da 2a chamada poderão ser consultados na 2a feira dia 9 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da primeira chamada poderão ser consultados na aula de dúvidas de 5a feira. -- ManuelBernardoBarbosa - 27 Jun 2007
Haverá uma aula de dúvidas de Criptografia, antes do exame da 2a chamada. Terá lugar na 5a feira, dia 28 de Junho, às 16:00, na sala de aula onde decorreram as aulas da disciplina. -- ManuelBernardoBarbosa - 26 Jun 2007
Os seguintes criptogramas foram gerados com RC4, AES em modo ECB, e AES em modo CBC. Em todos os casos foram utilizadas chaves/blocos de 128 bits. A chave utilizada foi 0x000102030405060708090a0b0c0d0e0f.
14 Out As notas do exame de recurso já saíram.
25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram. Teria que se realizar até ao final desta semana.
15 Mar A aula da próxima Sexta, 18 de Março, será substituida por uma palestra do Dr. António Lázaro sobre os primórdios da criptografia em Portugal. Apareçam às 14:00 no DI-A1.
Sumário: Digital Signature Algorithm. Protocolos de Identificação: conhecimento zero, desafio-resposta. -- ManuelBernardoBarbosa - 28 Apr 2006
Sumário: RSA OAEP. Assinaturas digitais. Protocolo Station to Station. -- ManuelBernardoBarbosa - 21 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 08 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 31 Mar 2006.
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB. -- ManuelBernardoBarbosa - 25 Mar 2006.
Sumário: Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 18 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 11 Mar 2006.
Exames de Education.Criptografia Aplicada exemplificativos do tipo de pergunta que poderá ser feita relativamente a certificação e aplicações. ( exemplo 1, exemplo 2 )
Bibliografia
Applied Cryptography: Protocols, Algorithms and Source Code in C,
Bruce Schneier
John Wiley & Sons, 1995.
Cryptography: Theory and Practice,
Douglas R. Stinson
CRC Press, 1995.
A Course in Number Theory and Cryptography,
Neal Koblitz
Springer-Verlag, 1994. (2nd edition)
-- ManuelBernardoBarbosa - 23 Apr 2004
14 Out As notas do exame de recurso já saíram.
25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram. Teria que se realizar até ao final desta semana.
15 Mar A aula da próxima Sexta, 18 de Março, será substituida por uma palestra do Dr. António Lázaro sobre os primórdios da criptografia em Portugal. Apareçam às 14:00 no DI-A1.
Education.Criptografia (MICEI)
Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA)
Sumário: Digital Signature Algorithm. Protocolos de Identificação: conhecimento zero, desafio-resposta. -- ManuelBernardoBarbosa - 28 Apr 2006
Sumário: RSA OAEP. Assinaturas digitais. Protocolo Station to Station. -- ManuelBernardoBarbosa - 21 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 08 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 31 Mar 2006.
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB. -- ManuelBernardoBarbosa - 25 Mar 2006.
Sumário: Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 18 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 11 Mar 2006.
Cifras simétricas, distribuição e acordo de chaves
Cifras assimétricas e Criptografia de Chave Pública
Assinaturas digitais e Message Authentication Codes
Identificação
Certificação e Public Key Infrastructure (PKI)
Certificados e CRLs
Autoridades de Registo
Autoridades de Certificação
Cadeias e Hierarquias de Certificação
Public Key Cryptography Standards (PKCS)
Aplicações e Protocolos Criptográficos Comerciais
Pretty Good Privacy (PGP)
Secure Sockets Layer (SSL)
IPsec
Kerberos
SSH
Horário das Aulas
MICEI/MSDPA: Sexta das 14:00 às 16:00 (DI A2)
Critérios de Avaliação
Exame Teórico (50%) + Trabalho Prático (50%)
Bibliografia
Applied Cryptography: Protocols, Algorithms and Source Code in C, Bruce Schneier. John Wiley & Sons, 1995.
Cryptography: Theory and Practice, Douglas R. Stinson. CRC Press, 1995.
A Course in Number Theory and Cryptography, Neal Koblitz. Springer-Verlag, 1994. (2nd edition)
Material Disponibilizado
Slides das Aulas:
Introdução - Conceitos introdutórios (corresponde à matéria da aula de apresentação).
Cifras Clássicas (slides que não foram apresentados durante o curso) - Apresenta as cifras utilizadas na antiguidade, assim como estratégias e técnicas de cripto-análise.
Fundamentos Teóricos (só foi apresentada a última parte, referente aos aspectos de complexidade computacional) - Apresenta-se a formalização da noção de "segurança" em sistemas criptográficos.
(No caso do trabalho prático não ser realizado, a nota final será limitada a 12 valores)
Avaliação prática
A componente prática da nota resulta da avalição de um trabalho prático cujo enunciado está disponível aqui.
O trabalho será realizado extra-aulas, individualmente.
Será necessário efectuar uma apresentação do trabalho efectuado, e entregar uma listagem comentada do código desenvolvido.
Para aqueles alunos que gostariam de realizar um Trabalho Prático com outras características, aqui estão algumas ideias (Projectos.pdf). Para mais informação contactar ManuelBernardoBarbosa.
Objectivos
Este curso pretende divulgar as técnicas criptográficas base que são mais relevantes à segurança dos sistemas de informação, em geral, e das comunicações electrónicas em particular.
Em alternativa à tradicional criptografia militar e diplomática, a ênfase do curso vai ser na chamada criptografia civil que tem como área de aplicação privilegiada o sector financeiro mas que se tem vindo a estender à globalidade dos sistemas de informação.
A divulgação e disponibilização de meios computacionais eficientes e baratos veio tornar obsoletas muitas das técnicas criptográficas tradicionais cuja segurança dependia, essencialmente, do seu desconhecimento público.
Ao invés, neste curso estudaremos uma nova geração de técnicas criptográficas que as vieram substituir as tradicionais e que, ao contrário destas, são técnicas abertas. Isto significa que os algoritmos e as metodologias de gestão de informação a eles associadas são publicamente conhecidos. Também significa que a sua segurança deve ser mais exigente porque tem de sobreviver ao escrutínio público.
Todas as técnicas criptográficas procuram resolver um ou mais dos problemas clássicos da comunicação segura:
Confidencialidade - É o problema que estuda o controlo do conhecimento da informação. Neste curso estudaremos cifras que constituem a técnica mais usual de garantir a confidencialidade da informação. Veremos várias classes de cifras adaptadas a requisitos distintos.
Autenticidade - Em termos de criptografia civil este é, talvez, o problema essencial. Estuda-se as circunstâncias em que items de informação (documentos electrónicos, ordens de pagamento, registos numa base de dados, etc.) são autênticos no sentido em que existem garantias de integridade e têm perfeitamente identificados os seus titulares. As assinaturas digitais são as técnicas base, estudadas neste curso, para lidar com este problema.
Identificação - Estudas as relações de entidades (pessoas, organizações e sistemas de informação) entre si. O reconhecimento da identidade de um utilizador num sistema operativo é, talvez, a versão mais conhecida deste problema. No entanto hoje em dia, com a crescente divulgação dos serviços mais variados através de meios electrónicos, a identificação de utilizadores legítimos desses serviços é um problema extremamente premente. As técnicas de identificação podem ter várias naturezas: podem ser baseadas em cifras ou em assinaturas digitais mas podem também ser baseadas em funções de hash.
É importante frisar que as técnicas criptográficas estudadas neste curso são o cerne das metodologias criptográficas usadas em aplicações concretas mas não definem completamente essas metodologias. Fica de fora deste curso toda a componente de protocolos criptográficos que será objecto de uma disciplina subsequente.
Programa Resumido
Terminologia
Canais seguros de informação.
Os objectivos e os problemas da Education.Criptografia.
Noção de cifra simétrica.
Noção de criptografia de chave públicas: cifras, assinaturas e protocolos.
Cifras Simétricas
Estudo das cifras orientadas à eficiência computacional.
Cifras sequenciais para processamento de informação em tempo real.
Cifras por blocos; seus modos e standards: DES e AES.
Introdução à criptoanálise linear e diferencial.
Teoria dos Números
Técnicas de teoria dos números em criptografia.
Divisibilidade.
Função de Euler-Phi.
Teoremas de Fermat e Chinês dos Restos.Factorização.
Grupos Cíclicos e o logaritmo discreto.
Números primos e factorização.
Education.Criptografia de Chave Pública baseada na Factorização de Inteiros
As técnicas RSA e Rabin. Cifras, assinaturas e protocolos.
Assinaturas com recuperação de mensagem.
Education.Criptografia de Chave Pública baseada no PLD
Segurança e o PLD (Problema do Logaritmo Discreto).
O protocolo de Diffie-Hellman. Técnicas El Gamal (cifra e assinatura).
Esquema de assinaturas DSA.
Education.Criptografia de Chave Pública: Protocolos
Protocolos de acordo e pré-distribuição de chaves.
Protocolos de identificação.
Certificados.
Education.Criptografia de Chave Pública baseada em Curvas Elípticas
O standard IEEE P1363.
Técnicas criptográficas baseadas no PLDCE:
cifras (El Gamal e ECES)
assinaturas (Nyberg-Rueppel e ECDSA)
protocolos (MQV e MO).
Bibliografia
Apontamentos Teóricos, José Valença, Departamento de Informática, Universidade do Minho.
Applied Cryptography: Protocols, Algorithms and Source Code in C,
Bruce Schneier
John Wiley & Sons, 1995.
Cryptography: Theory and Practice,
Douglas R. Stinson
CRC Press, 1995.
A Course in Number Theory and Cryptography,
Neal Koblitz
Springer-Verlag, 1994. (2nd edition)
-- ManuelBernardoBarbosa - 25 Fev 2004
27 Jul Já sairam as notas da época de recurso.
15 Jul Já sairam as notas da época normal.
1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem a entrega por email.
31 Mar Foi publicado o enunciado do segundo trabalho prático.
15 Mar Na próxima Sexta, 18 de Março, decorrerá no DI-A1 às 14:00 uma palestra sobre os primórdios da criptografia em Portugal. Apareçam!
14 Mar Já existem ideias para projectos alternativos. Vejam aqui.
9 Mar Foi publicado o enunciado do primeiro trabalho prático.
16 Fev A apresentação desta opção será no dia 21 Fev às 15h10 no DI-A2.
Elementos/Fundamentos de Education.Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2004-2005
Este curso pretende divulgar as técnicas criptográficas base que são mais relevantes à segurança dos sistemas de informação, em geral, e das comunicações electrónicas em particular.
Em alternativa à tradicional criptografia militar e diplomática, a ênfase do curso vai ser na chamada criptografia civil que tem como área de aplicação privilegiada o sector financeiro mas que se tem vindo a estender à globalidade dos sistemas de informação.
A divulgação e disponibilização de meios computacionais eficientes e baratos veio tornar obsoletas muitas das técnicas criptográficas tradicionais cuja segurança dependia, essencialmente, do seu desconhecimento público.
Ao invés, neste curso estudaremos uma nova geração de técnicas criptográficas que as vieram substituir as tradicionais e que, ao contrário destas, são técnicas abertas. Isto significa que os algoritmos e as metodologias de gestão de informação a eles associadas são publicamente conhecidos. Também significa que a sua segurança deve ser mais exigente porque tem de sobreviver ao escrutínio público.
Todas as técnicas criptográficas procuram resolver um ou mais dos problemas clássicos da comunicação segura:
Confidencialidade - É o problema que estuda o controlo do conhecimento da informação. Neste curso estudaremos cifras que constituem a técnica mais usual de garantir a confidencialidade da informação. Veremos várias classes de cifras adaptadas a requisitos distintos.
Autenticidade - Em termos de criptografia civil este é, talvez, o problema essencial. Estuda-se as circunstâncias em que items de informação (documentos electrónicos, ordens de pagamento, registos numa base de dados, etc.) são autênticos no sentido em que existem garantias de integridade e têm perfeitamente identificados os seus titulares. As assinaturas digitais são as técnicas base, estudadas neste curso, para lidar com este problema.
Identificação - Estudas as relações de entidades (pessoas, organizações e sistemas de informação) entre si. O reconhecimento da identidade de um utilizador num sistema operativo é, talvez, a versão mais conhecida deste problema. No entanto hoje em dia, com a crescente divulgação dos serviços mais variados através de meios electrónicos, a identificação de utilizadores legítimos desses serviços é um problema extremamente premente. As técnicas de identificação podem ter várias naturezas: podem ser baseadas em cifras ou em assinaturas digitais mas podem também ser baseadas em funções de hash.
É importante frisar que as técnicas criptográficas estudadas neste curso são o cerne das metodologias criptográficas usadas em aplicações concretas mas não definem completamente essas metodologias. Fica de fora deste curso toda a componente de protocolos criptográficos que será objecto de uma disciplina subsequente.
Programa Resumido
Terminologia
Canais seguros de informação.
Os objectivos e os problemas da Education.Criptografia.
Noção de cifra simétrica.
Noção de criptografia de chave públicas: cifras, assinaturas e protocolos.
Cifras Simétricas
Estudo das cifras orientadas à eficiência computacional.
Cifras sequenciais para processamento de informação em tempo real.
Cifras por blocos; seus modos e standards: DES e AES.
Introdução à criptoanálise linear e diferencial.
Teoria dos Números
Técnicas de teoria dos números em criptografia.
Divisibilidade.
Função de Euler-Phi.
Teoremas de Fermat e Chinês dos Restos.Factorização.
Grupos Cíclicos e o logaritmo discreto.
Números primos e factorização.
Education.Criptografia de Chave Pública baseada na Factorização de Inteiros
As técnicas RSA e Rabin. Cifras, assinaturas e protocolos.
Assinaturas com recuperação de mensagem.
Education.Criptografia de Chave Pública baseada no PLD
Segurança e o PLD (Problema do Logaritmo Discreto).
O protocolo de Diffie-Hellman. Técnicas El Gamal (cifra e assinatura).
Esquema de assinaturas DSA.
Education.Criptografia de Chave Pública: Protocolos
Protocolos de acordo e pré-distribuição de chaves.
Protocolos de identificação.
Certificados.
Education.Criptografia de Chave Pública baseada em Curvas Elípticas
O standard IEEE P1363.
Técnicas criptográficas baseadas no PLDCE:
cifras (El Gamal e ECES)
assinaturas (Nyberg-Rueppel e ECDSA)
protocolos (MQV e MO).
Bibliografia
Apontamentos Teóricos, José Valença, Departamento de Informática, Universidade do Minho.
Projectos - a data limite para a entrega dos projectos (protocolo Multicert/UM) é 30 de Setembro de 2006.
-- JoseBacelarAlmeida - 11 Set 2006
Classificações - As classificações já foram actualizadas com as notas da época de recurso.
Encontram-se aqui.
-- JoseBacelarAlmeida - 29 Jul 2006
Classificações da época normal - Já estão disponíveis as classificações da época normal (1ª e 2ª chamadas).
Encontram-se aqui.
-- JoseBacelarAlmeida - 17 Jul 2006
Notas da componente prática - Já está disponível a avaliação da componente prática da disciplina (aqui).
-- JoseBacelarAlmeida - 5 Jul 2006
Apontamentos (versão final) - Já está disponível a versão final dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 2 Jun 2006
Data de entrega do 2º trabalho - A data de entrega do 2º trabalho foi alterada para 8/6/2006.
-- JoseBacelarAlmeida - 25 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 23 May 2006
Projectos - já estão disponíveis as propostas de projectos no âmbito do protocolo Multicert/UM.
-- JoseBacelarAlmeida - 18 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 May 2006
Aula sobre prova de segurança do ElGamal - A aula de 11/05/2006 será dada pelo prof. Manuel Barbosa, sobre a prova de segurança da cifra ElGamal.
-- JoseBacelarAlmeida - 11 May 2006
Palestra - O coordenador Socrates/Erasmus, aproveitando a visita da Professora Tatjana Weltzer (Univ. Maribor, Eslovénia), sugeriu que a aula prática de 04/05/2006 fosse dedicada à assistencia da palestra Data Reusability. Por esse motivo a aula terá lugar no anfiteatro DI-A2.
-- JoseBacelarAlmeida - 03 May 2006
Apontamentos - Foram disponibilizados (secção da bibliografia) os apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 Apr 2006
JOIN'06 - Dada a realização das JOIN, não haverá aula TP no dia 06/04/2006 (ou mais precisamente, a
aula será nas próprias jornadas).
-- JoseBacelarAlmeida - 04 Apr 2006
Elementos/Fundamentos de Education.Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2005-2006
Não há pré-requisitos para frequentar esta disciplina.
Critério de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática (Trabalho Prático): 30%
Avaliação prática
A componente prática da nota resulta da avalição de um conjunto de guiões e de pequenos trabalhos.
Opcionalmente, os alunos poderão ainda realizar um projecto individual (ver lista de propostas em ElementosCriptografiaProjs0506). Esse projecto consistirá numa monografia (eventualmente com uma componente de programação) sobre um tema relacionado com a disciplina, e combinado em conjunto com o docente. O peso deste projecto na avaliação da disciplina dependerá da dificuldade e abrangência do tema escolhido.
Este curso introduz as técnicas criptográficas base relevantes à segurança dos sistemas de informação. Coloca ênfase especial na fundamentação matemática dessas técnicas e deixa para uma disciplina subsequente a sua aplicação em sistemas de informação concretos.
Notas - saíram as notas da 1ª chamada
--PaulaCristinaValenca? - 27 Jul 2007
JOIN'07 - devido a estar a decorrer as join'07, não haverá aula dia 10/05.
--PaulaCristinaValenca? - 09 May 2007
Alteração da data de entrega de trabalho - a data limite para entrega do primeiro trabalho prático foi alterada para 7 de Maio 2007.
--PaulaCristinaValenca? - 24 Apr 2007
Aula cancelada - a aula de 19/04 não irá decorrer.
--PaulaCristinaValenca? - 18 Apr 2007
Trabalho Prático - o enunciado do primeiro trabalho prático está disponível aqui--PaulaCristinaValenca? - 15 Apr 2007
Mudança de sala - as aulas TP decorrerão a partir desta semana na sala 003
--PaulaCristinaValenca? - 13 Mar 2007
Apontamentos - actualização.
--PaulaCristinaValenca? - 12 Mar 2007
Apontamentos - a primeira parte dos apontamentos teóricos da disciplina está disponível na secção da bibliografia.
--PaulaCristinaValenca? - 05 Mar 2007
Elementos/Fundamentos de Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2006-2007
Não há pré-requisitos para frequentar esta disciplina.
Critério de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática (Trabalho Prático): 30%
Avaliação prática
A componente prática da nota resulta da avalição de um conjunto de guiões e de pequenos trabalhos.
Opcionalmente, os alunos poderão ainda realizar um projecto individual (ver lista de propostas em ElementosCriptografiaProjs0506). Esse projecto consistirá numa monografia (eventualmente com uma componente de programação) sobre um tema relacionado com a disciplina, e combinado em conjunto com o docente. O peso deste projecto na avaliação da disciplina dependerá da dificuldade e abrangência do tema escolhido.
Este curso introduz as técnicas criptográficas base relevantes à segurança dos sistemas de informação. Coloca ênfase especial na fundamentação matemática dessas técnicas e deixa para uma disciplina subsequente a sua aplicação em sistemas de informação concretos.
27 Jul Já sairam as notas da época de recurso.
15 Jul Já sairam as notas da época normal.
1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem a entrega por email.
31 Mar Foi publicado o enunciado do segundo trabalho prático.
15 Mar Na próxima Sexta, 18 de Março, decorrerá no DI-A1 às 14:00 uma palestra sobre os primórdios da criptografia em Portugal. Apareçam!
14 Mar Já existem ideias para projectos alternativos. Vejam aqui.
9 Mar Foi publicado o enunciado do primeiro trabalho prático.
16 Fev A apresentação desta opção será no dia 21 Fev às 15h10 no DI-A2.
Projectos - a data limite para a entrega dos projectos (protocolo Multicert/UM) é 30 de Setembro de 2006.
-- JoseBacelarAlmeida - 11 Set 2006
Classificações - As classificações já foram actualizadas com as notas da época de recurso.
Encontram-se aqui.
-- JoseBacelarAlmeida - 29 Jul 2006
Classificações da época normal - Já estão disponíveis as classificações da época normal (1ª e 2ª chamadas).
Encontram-se aqui.
-- JoseBacelarAlmeida - 17 Jul 2006
Notas da componente prática - Já está disponível a avaliação da componente prática da disciplina (aqui).
-- JoseBacelarAlmeida - 5 Jul 2006
Apontamentos (versão final) - Já está disponível a versão final dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 2 Jun 2006
Data de entrega do 2º trabalho - A data de entrega do 2º trabalho foi alterada para 8/6/2006.
-- JoseBacelarAlmeida - 25 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 23 May 2006
Projectos - já estão disponíveis as propostas de projectos no âmbito do protocolo Multicert/UM.
-- JoseBacelarAlmeida - 18 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 May 2006
Aula sobre prova de segurança do ElGamal - A aula de 11/05/2006 será dada pelo prof. Manuel Barbosa, sobre a prova de segurança da cifra ElGamal.
-- JoseBacelarAlmeida - 11 May 2006
Palestra - O coordenador Socrates/Erasmus, aproveitando a visita da Professora Tatjana Weltzer (Univ. Maribor, Eslovénia), sugeriu que a aula prática de 04/05/2006 fosse dedicada à assistencia da palestra Data Reusability. Por esse motivo a aula terá lugar no anfiteatro DI-A2.
-- JoseBacelarAlmeida - 03 May 2006
Apontamentos - Foram disponibilizados (secção da bibliografia) os apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 Apr 2006
JOIN'06 - Dada a realização das JOIN, não haverá aula TP no dia 06/04/2006 (ou mais precisamente, a
aula será nas próprias jornadas).
-- JoseBacelarAlmeida - 04 Apr 2006
Notas - saíram as notas da 1ª chamada
--PaulaCristinaValenca? - 27 Jul 2007
JOIN'07 - devido a estar a decorrer as join'07, não haverá aula dia 10/05.
--PaulaCristinaValenca? - 09 May 2007
Alteração da data de entrega de trabalho - a data limite para entrega do primeiro trabalho prático foi alterada para 7 de Maio 2007.
--PaulaCristinaValenca? - 24 Apr 2007
Aula cancelada - a aula de 19/04 não irá decorrer.
--PaulaCristinaValenca? - 18 Apr 2007
Trabalho Prático - o enunciado do primeiro trabalho prático está disponível aqui--PaulaCristinaValenca? - 15 Apr 2007
Mudança de sala - as aulas TP decorrerão a partir desta semana na sala 003
--PaulaCristinaValenca? - 13 Mar 2007
Apontamentos - actualização.
--PaulaCristinaValenca? - 12 Mar 2007
Apontamentos - a primeira parte dos apontamentos teóricos da disciplina está disponível na secção da bibliografia.
--PaulaCristinaValenca? - 05 Mar 2007
Os projectos aqui propostos deverão ser apresentados sobre a forma de monografia. De uma forma genérica, consistem no aprofundamento de um determinado tema avançado da criptografia moderna, por intermédio de leitura de artigos de investigação e da consulta de bibliografia relevante. Não quer isto dizer que não tenha cabimento incluir a codificação de algoritmos e/ou técnicas - fragmentos de código poderão ser relevantes para ilustrar as várias técnicas ou conduzir pequenas experiências (e.g. scripts PARI/GP). A este respeito, o projecto das BDDs distingue-se dos restantes na medida em que, neste, a componente de codificação tem um peso notoriamente superior aos demais.
Utilização de BDDs para análise de funções booleanas
A utilização de BDDs (Binary Decision Diagrams) é um ingrediante fundamental na codificação eficiente de algoritmos de verificação de fórmulas lógica (e.g. algoritmo Davis Putnam). O objectivo deste trabalho é de explorar essas estruturas de dados na análise de funções booleanas utilizadas em operações criptográficas (por intermédio dos seus espectros, conforme foi apresentado nas aulas teóricas de EC).
Trata-se de um trabalho essencialmente prático já que se pretende adaptar uma implementação existente de BDDs (em linguagem C ou C++) para as operações específicas da manipulação de espectos de funções booleanas.
*material de referência:
Tradicionalmente, a verificação eficiente da primalidade de números era obtida por intermédio de testes probabilísticos --- existia portanto uma (pequena) probabilidade de o algoritmo identificar um "falso primo". Recentemente (2002) surgiram os primeiros testes de primalidade determinísticos de complexidade polinomial.
O objectivo deste trabalho é elaborar um estudo em torno da verificação da primalidade, com especial ênfase na apresentação dos algoritmos determinísticos.
Material de Referência:
A criptoanálise algébrica reclama produzir ataques sobre cifras simétricas até agora tidas como seguras como Serpent ou mesmo o AES (mas a níveis que não comprometem a segurança actual da cifra). Trata-se de um assunto ainda envolto em certa polémica porque a concretização desses ataques passa por procedimentos heurísticos cuja viabilidade em sistemas reais é discutível.
Material de referência:
artigo da Wikipedia (bem mais moderado e equilibrado do que o site anterior)
Técnicas criptográficas baseadas em identidade
Nas técnicas criptográficas baseadas em identidade (identity based cryptography) a chave pública dos intervenientes é obtida directamente da sua identidade. Estas técnicas são um domínio preveligiado da aplicação de pairings (emparelhamento) construídas sobre grupos cíclicos.
O objectivo deste trabalho é o de se realizar um estudo dos fundamentos teóricos dos emparelhamentos e da sua aplicação em técnicas criptográficas baseadas em identidade.
Material de referência:
A segurança de técnicas e protocolos criptográficos demonstra-se por redução desses sistemas a operações tidas como computacionalmente intratáveis. No modelo Random Oracle, essa redução é realizada sob a assunção que as funções de sentido único exibem um comportamento indestiguível do aleatório e portanto podem ser simuladas por intermédio de invocações a um "oráculo" apropriado.
Material de referência:
As funções de hash são um ingrediante fundamental em muitos técnicas criptográficas. Recentemente, foram anunciados alguns ataques a funções de Hash tidas como seguras como o MD5 ou variantes do SHA. O objectivo deste trabalho consiste em estudar os requisitos de segurança impostos sobre as funções de Hash criptográficas, quais os ataques associados, e quais as implicações desses requisitos na segurança de técnicas criptográficas (e.g. assinatura digital). Pretende-se também realizar um levantamento do estado de arte actual dos ataques às funções de Hash usuais e das estratégias para os encontrar.
Material de referência:
Efectue a criptoanálise destes quatro criptogramas que foram obtidos recorrendo a cifras de substituição, Affine e Vigenere. Deve que determinar que cifra foi utilizada em cada um dos casos. Apresente todo o trabalho que desenvolver, incluindo o código, e explique como chegou a uma solução. Não é suficiente apresentar o texto limpo.
Os textos limpos são em Português, e não contêm acentuação de nenhum tipo, espaços ou pontuação. Os valores típicos da análise de frequência aplicáveis em Inglês não são aplicáveis neste caso: terão de ser calculados propositadamente para este efeito. Quanto melhor for a qualidade dos valores que obtiver, maiores serão as hipóteses de que os seus palpites estejam correctos.
Recupere o texto limpo correspondente a cada um dos seguintes criptogramas obtidos com a cifra RSA. Os textos limpos são em Português, e não contêm acentuação de nenhum tipo, espaços ou pontuação. Note que para módulos pequenos o problema da factorização do módulo é relativamente fácil de resolver. O texto limpo foi dividido em blocos de i letras: cada bloco Li ... L1 L0 é codificado no inteiro Li*(26^i) + ... + L1*26 + L0. No último bloco é sempre inserido padding, correspondendo cada letra inserida ao tamanho do padding. Escreva e use os seus próprios programas para fazer a criptoanálise. Submeta listagens comentadas das partes relevantes do código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Gere uma chave RSA que permita cifrar blocos de 20 letras, como por exemplo a seguinte:
n = 1174131352704207214349241420991791462495108045279851173277
a = 935796131047316636883975835187745394794578628568303251791
b = 401138724311605979942538127567746219521486438387303984111
Já agora, como extra poderá tentar factorizar este módulo.
Trabalho Prático 3 (5 Maio)
Seja E a curva elíptica y^2 = x^3 + x + 13 definida sobre Z149.
Determine o número de pontos em E.
Determine se E é ou não um grupo cíclico. Em caso afirmativo encontre um gerador desse grupo. Senão, encontre um elemento com ordem máxima.
Decifre o seguinte criptograma determinado com a cifra de Menezes-Vanstone descrito na secção 5.2.2 do livro Cryptography: Theory and Practice. O expoente secreto é a = 100. Cada elemento do texto em claro representa dois caracteres, codificados como A<->1, B<->2, ..., Z<->26 (neste caso, 0 não é permitido no texto em claro).
Defina uma função que determine o inverso multiplicativo de x\in Zn (note que pode não existir).
Defina uma função que determine o grupo multiplicativo Zn*.
Modifique a função anterior para que, a cada elemento de x\in Zn*, associe o sub-grupo cíclico gerado por x.
09/03/2006 - Aritmética Modular e RSA
As seguintes funções do PARI/GP vão ser uteis nesta sessão: eulerphi, gcd, bezout, chinese, prime, isprime, ispseudoprime, random. Recomenda-se portanto uma leitura rápida da documentação disponibilizada pelo GP (e.g. ?eulerphi, ou para mais detalhe ??eulerphi).
Utilize a função bezout para calcular o inverso multiplicativo de x\in Zn.
O teorema chinês dos restos permite resolver um sistema de equações {x = ai [ni]} quando os valores ni são primos entre si dois a dois. Como poderá explorar esse resultado (e função respectiva do GP) para resolver o seguinte sistema de equações?
13 x = 4 [99]
15 x = 56 [101]
Codifique uma função que gere aleatóriamente um número primo (o número de dígitos é passado como argumento).
Pretende-se codificar o algoritmo RSA. Para tal deverá realizar três funções:
rsa_setup, que recebe como argumento o número de dígitos da chave e retorna como resultado o par de chaves.
rsa_enc, que recebe como argumento a chave pública e o texto limpo, e retorna o criptograma.
rsa_dec, que recebe como argumento a chave privada e o criptograma, e retorna o texto limpo.
16/03/2006 - Ataques ao RSA
Correcção do RSA (i.e. x=rsa_dec(rsa_enc(x,pubKey),privKey))
Alguns ataques ao RSA:
Factorização do módulo
Codebook
Módulo comum
Expoente baixo
Trabalho 1: Cifra RSA
Deverá desenvolver uma script PARI/GP que implemente o algoritmo RSA assim como os ataques estudados a essa cifra. Deve procurar tornar o seu código o mais eficiente possível e não esqueça de incluir comentários por forma a tornar inteligível a sua leitura. Inclua também exemplos que ilustrem as funcionalidades implementadas.
Os trabalhos deverão ser enviados por email até ao dia 30/3/2006.
Desafios:
Tente recuperar o texto limpo correspondente a cada um dos seguintes criptogramas obtidos com a cifra RSA. Os textos limpos são em Português. Note que para módulos pequenos o problema da factorização do módulo é relativamente fácil de resolver. O texto limpo foi dividido em blocos de i letras e codificado sob uma base b: cada bloco Li ... L1 L0 é codificado no inteiro Li*(b^i) + ... + L1*b + L0. Para valores de base b adoptam-se alternativamente o 26 (só se codificam as letras, omitindo-se do texto limpo espaços, dígitos e pontuação) ou 255 (código ascii).
No último bloco é sempre inserido padding, correspondendo cada letra inserida ao tamanho do padding. Escreva e use os seus próprios programas para fazer a criptoanálise. Submeta as scripts de código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Importante: note que certos números são apresentados em várias linhas.
Problema 1
i = 9; b = 255
e = 17
n = 1249041700673382695459846605609514730554186626237
C = 321180546341126455980279730178761953097183911234, 716950862594240028452266734363072497454521223524, 574948179391147816051505896812694387194959833965, 111532735643033423942855061239383848643971241832
Problema 2 - Uma mesma mensagem M foi cifrada para três destinatários distintos resultando em C1, C2 e C3. Os parâmetros utilizados foram:
n = 63914704110618263992945741621505287653261454154795997491424168943092481614551744951230978759060853906999263256464277377149313570557480462140376730466093139279042063802231438893958813649137968723832554178514469387083227792295356047773281856489868696857456780247422046270127054298844870602475384663637199209513
C = 350915208109496145856, 27661335465828884684696, 31802586529207976000000, 494171409093635852161856, 407524745047362736519656
Problema 4
i = 6; b = 26
e = 7
n = 63914704110618263992945741621505287653261454154795997491424168943092481614551744951230978759060853906999263256464277377149313570557480462140376730466093139279042063802231438893958813649137968723832554178514469387083227792295356047773281856489868696857456780247422046270127054298844870602475384663637199209513
C = 32043924526870920534079392028726370777600000000000000, 19306983940121876610266501070351375064373302782143184896, 868570571278402253220237877279110105219431120896, 74155878556235370096776829384639812609423519551832064
Problema 5
i = 2; b = 255
e = 65537
n = 17261200916952873367482144866494450909360697563046707445863443627091875871740773679233823099712178179358393710196331449844554301490846811351075814696529637192369851435155247912946391141781758246256188893928155117998023665625185156995891322212159388498447355096970990510996522873761394696658254094897711248116842246989910729668464151532042605269120184232048980862110396885191539147917938822921764164079034002842741264794291828765227570141138448500874109634833892704185454278081338756835822183447573030032642382069970175786340323583948629425256405818165398966715248409970692185032883713278510782005243891336381732676319
Pretende-se implementar algumas técnicas baseadas no problema do Logaritmo Discreto, nomeadamente o acordo de chaves Diffie-Hellman e a cifra El Gamal.
Codifique procedimentos que:
gere primos de Sophie Germain (i.e. q tal que 2*q+1 também é primo).
um gerador do grupo multiplicativo Zp* (em que p=2*q+1). Utilize o facto que g\in Zp* é um gerador se g^2!=1[p] e g^q!=1[p].
um gerador de um sub-grupo de Zp* de ordem q (onde p=2*q+1).
Implemente as seguintes técnicas (incluindo a geração dos parâmetros):
Acordo de chaves Diffie-Hellman,
Cifra ElGamal
23/03/2006 - (16:00-18:00 - substituição da aula de 30/03/2006)
Aula de acompanhamento ao primeiro trabalho prático.
06/04/2006 - (JOIN06)
JOIN'06
20/04/2006 - Corpos Finitos
Pretende-se implementar algumas funções de manipulação de Corpos Finitos em Pari/GP. Para tal far-se-á uso da habilidade desse sistema possibilitar a manipulação directa de polinómios.
Utilize o PARI/GP para:
Determinar se x^5-x é divisível por x^2+1 em GF(3)
Calcular a factorização de x^9-x
OBS: Note que funções bem conhecidas como gcd, factor admitem polinómios como argumentos. Existem também funções específicas para manipulação de polinómios como polisirreducible, factormod, polrootsmod, etc. -- consulte o help (?7).
Defina uma função que calcule todos os polinómios primitivos do corpo finito GF(m) (com m=p^n e p primo). Determine os polinómios promitivos de GF(9) e GF(81). [RELEMBRE: um polinómio f(X) diz-se primitivo em GF(p^n) se tiver grau n e se o menor inteiro k para o qual f(X) divide x^k-1 for p^n-1.]
Defina as operações do corpo finito com m=p^n elementos (p primo) visto como GF(p)[X]/<f(X)> onde f(X) é um polinómio primitivo de grau n com coeficientes em GF(p).
Implemente a cifra ElGamal sobre o corpo finito GF(2^n). (obs.: para n suficientemente grande, as funções realizadas na aula anterior para encontrar o polinómio primitivo não irá funcionar. Para tal deve consultar a tabela de polinómios primitivos disponibilizados em P1363-AnexoA).
Algumas funções úteis para converter inteiros em polinómios binários...
\\assume-se que o polinómio "p" está definido sobre a variável "x"!!!
poleval(y,p) =
{
local(x=y);
return (eval(p));
}
pol2int(p) = poleval(2,lift(lift(p)))
int2pol(v) =
{
local(dr,i,res,p);
dr=divrem(v,2)~;
res = 0;
p = 0;
dr = [v,0];
until(dr[1] == 0, dr=divrem(dr[1],2)~; res += Mod(dr[2],2)*x^p; p++);
return (res);
}
Trabalho 2: Cifra ElGamal e Acordo de Chaves Diffie Hellman
Deverá desenvolver uma script PARI/GP que implemente o acordo de chaves Diffie Hellman e a cifra ElGamal nos seguintes grupos:
Sub-grupo de ordem elevada de Zp.
No corpo finíto GF(2^n).
Numa curva elíptica sobre GF(p).
Deve procurar tornar o seu código o mais eficiente possível e não esqueça de incluir comentários por forma a tornar inteligível a sua leitura. Inclua também exemplos que ilustrem as funcionalidades implementadas.
Prazo de entrega:
Os trabalhos deverão ser enviados por email até ao dia 8/6/2006 (actualizado em 25/5/2006).
04/05/2006 - Palestra de Tatjana Weltzer
Palestra Data Reusability (DI-A2).
11/05/2006 - A segurança semântica de primitivas criptográficas
Aula sobre definição de segurança das primitivas criptográficas. Demonstração da segurança semântica do El Gamal (pelo prof. Manuel Barbosa).
18/05/2006 - Enterro da Gata
Tolerância de ponto: Enterro da Gata.
25/05/2006 - Curvas Elípticas sobre Corpos Finitos
Aula sobre os fundamentos de técnicas criptográficas baseadas em Curvas Elípticas. No sistema PARI-GP, faremos uso das funções dedicadas às curvas elípticas, em particular ellinit, ellisoncurve, elladd, ellpow.
Replique, em PARI-GP, os exemplos apresentados no tutorial de curvas elípticas sobre corpos finitos GF(p). Obs.: O Pari-GP não suporta apropriadamente curvas elípticas sobre corpos finitos binários GF(2^n). Por esse motivo vamos considerar unicamentre curvas elípticas sobre corpos da forma GF(p) (p primo).
Implemente o El Gamal e o DH em curvas elípticas sobre corpos GF(p). Para o efeito, pode utilizar os parâmetros gerados na página http://www.cryptomathic.com/labs/ellipticcurvedemo.html ou, ainda melhor, disponibilizados por um standard apropriado como http://www.secg.org/?action=secg,docs_secg. Obs.: A codificação directa do El Gamal em curvas elípticas pressupõe a codificação da mensagem em pontos da curva. Esta tarefa não é de todo imediata, motivo pelo qual não é normalmente utilizada essa técnica nessa forma em curvas elípticas (um segundo motivo prende-se com o facto de que essa técnica não ser segura face a ataques de criptograma escolhido). Uma forma de ultrapassar a operação de codificação da mensagem em pontos da curva é utilizar-se a versão Hashed El Gamal (c.f. aula de provas de segurança dada por prof. Manuel Barbosa).
Esta sessão é acompanhada de um documento PDF que apresenta uma versão mais detalhada da introdução que se segue.
Instalação
O PARI/GP é um sistema de algebra computacional particularmente indicado para computações na área de Teoria de Números e, consequentemente, para a resolução de pequenos problemas na área de Criptografia. Além das bibliotecas, contém um interpretador,
gp, e uma linguagem de script, gp-script.
A página oficial é http://pari.math.u-bordeaux.fr/.
Para instalar o programa da distribuição de source, faça:
Se usa o Emacs, a distribuição inclui modos de suporte para o PARI/GP. Consulte a documentação e o ficheiro pariemacs.txt para mais informação.
A distribuição inclui também documentação, em particular, um manual de utilizador, um tutorial e uma Reference Card. Esta última será de grande utilidade no futuro. Robert B. Ash escreveu também um tutorial do Pari/GP.
Tipos do PARI e comandos básicos
Para correr, chame num terminal o comando gp. Para terminar, escreva quit ou \q. Para ajuda numa função ou palavra ( e.g, foo ), ?foo ou ??foo. O último output pode ser chamado através de %, %n para a linha n. O carácter # acciona ou desacciona o temporizador. Finalmente, \r fich lê um ficheiro fich (mais tarde importaremos pequenos programas GP desta forma).
Há quinze tipos fundamentais no PARI, enumerados a seguir. Concentraremo-nos nos oito primeiros (no entanto, encontrará por certo referências aos outros tipos na literatura na área de Criptografia).
t_INT - Inteiros
t_REAL - Reais
t_FRAC - Racionais
t_INTMOD - Inteiros Modulares
t_COMPLEX - Complexos
t_POL - Polinómios
t_MAT - Matrizes
t_VEC/t_COL - Vectores
t_LIST - Listas
t_STR - Strings
t_QUAD - Corpos Quadráticos
t_PADIC - P-ádicos
t_POLMOD - Polinómios mod P(X)
t_SER - Séries de potências
t_RFRAC - Funções Racionais
Siga o documento PDF que acompanha esta aula. As notas seguintes são apenas um resumo dos passos a seguir.
Exemplo: Primalidade e Factorização
Defina p como o menor primo maior que 2100, q como o primo seguinte e n = p*q.
Accione o timer e corra trial division (isto é, divida por todos os números) até 20000
Como explica o resultado? E por que razão continuar a tentar dividir por todos os números até à raiz quadrada de n não é uma boa estratégia?
Use o teste do Pequeno Teorema de Fermat para a = 2 e confirme o resultado com o comando isprime (registe o tempo que este último levou)
Factorize n usando o comando factor e compare o tempo que este levou com o tempo do isprime
Como curiosidade, corra a seguinte sequência de instruções,
gp > { u = nextprime(sqrtint(n));
i = 1;
while(i < 100 && n%u, u = nextprime(u); i = i + 1);
u
}
gp > u == q
gp > q - p
gp > #
Do Algoritmo de Euclides à Aritmética Modular
No que se segue, crie e edite um ficheiro com extensão .gp e importe no GP através do comando \r fich.
A função factorial pode ser definida da seguinte forma,
\\ exemplo simples da definicao de uma funcao em GP
myFact(n) =
{ local(fact);
if( type(n) != "t_INT" || n < 0,
return(-1));
fact = 1;
while( n > 0,
fact = fact*n;
n = n - 1;
);
fact
}
Com base neste exemplo,
escreva uma função que calcule o maior divisor comum ( gcd ) de dois inteiros não negativos através do algoritmo de Euclides e estime a complexidade do algoritmo;
extenda a sua função de forma a calcular u e v, tal que un + vm = gcd(n,m) segundo a versão extendida do algoritmo de Euclides;
compare o resultado da sua função com o da função bezout, para m = 2101+1 e n = 2237+25+1;
verifique que o inverso de m mod n é v mod n, ainda no exemplo acima;
tente calcular o inverso de 5 mod n usando os dois métodos e explique o resultado
08/03/2007 - Computações
Pretende-se nesta sessão sensibilizar os alunos para a complexidade de um algoritmo, através da discussão de certos exemplos de algoritmos simples mas fundamentais. Consulte o PDF auxiliar para a descrição dos algoritmos.
Seja (G, *) um grupo multiplicativo. Pretende-se calcular de uma forma eficiente gn para um elemento g de G e um inteiro n.
Implemente o algoritmo de potenciação descrito no PDF auxiliar
Conte o número de multiplicações no pior caso e em média.
Diga a complexidade em tempo do algoritmo.
Na aula passada foi apresentado o teste de Fermat para teste da não primalidade de um número. O teste de Miller-Rabin não só elimina os casos de pseudo-primos do estilo dos números de Carmichael como requere menos tentativas feitas. É um algoritmo não determinístico que poderia ser tornado deterministico assumindo a hipótese generalizada de Riemann.
Implemente o teste de Miller-Rabin, descrito no PDF auxiliar (consulte a função random)
Explique a presença de c = 20 no algoritmo.
Dê uma estimativa para o tempo médio do algoritmo e discuta a probabilidade de o teste falhar-
Utilize o teste de Miller-Rabin para gerar um número (provavelmente) primo aleatório com n bits
Qual o pior caso?
Sabendo que a variável aleatória X que toma o valor do número de tentativas necessárias para ter um primeiro sucesso segue a distribuição discreta geométrica e que o número de primos até N tende para N/(log N) à medida que N tende para infinito, dê uma estimativa para a complexidade média deste método.
15/03/2007 - Continuação da aula anterior
Primeiro, um pequeno aquecimento,
Use a função bezout, para calcular o GCD (extendido) de m = 2101+1 e n = 2237+25+1; esta função calcula u e v, tal que un + vm = gcd(n,m).
Calcule seguidamente o inverso de m mod n e verifique que é v mod n
Tente calcular o inverso de 5 mod n usando os dois métodos e explique o resultado
Voltando para o tema da aula anterior, faça a segunda e terceira parte da aula: o teste de Miller-Rabin e uma função que gere um primo aleatório com n bits. Responda também às questões postas.
22/03/2007 - "Birthday attack", colisões e funções de Hash
Calcule quantas pessoas são necessárias numa sala para que a probabilidade de uma delas partilhar o seu aniversário seja superior a 50%.
Calcule quantas pessoas são necessárias para que a probabilidade que duas façam anos no mesmo dia seja superior a 50%.
Seja H(x) uma função de hash que dada uma mensagem de tamanho arbitrário, devolve uma string de tamanho fixo 160 bits. Supondo que qualquer string de 160 bits tem igual probabilidade de ocorrência e usando a aproximação e^(-a/n) = (1 - a/n), calcule o número de tentativas necessárias num ataque à força bruta para encontrar uma colisão com probabilidade superior a 0.5. Como referência um ataque de pré-imagem à força bruta numa função de hash n-bit deverá requerer aproximadamente 2n tentativas.
Construa uma função de hash da seguinte forma:
Escolha p e q primos aleatórios de 512 bits e defina uma funcao f(x) = x2 mod pq
Defina uma função que dada uma mensagem a parta em blocos de k bits.
Defina uma função que cicle sobre os blocos Sk+1 = (Sk + bk)2 mod pq, sendo S0 um valor aleatório (a seed) e bk o bloco k da mensagem.
Defina a função de hash como sendo uma função que retire 160 bits aleatórios dos 1024 bits do último Sk
29/03/2007 - Funções de Hash - continuação da aula anterior
Dado estar a decorrer a ETAPS, a aula desta semana foi mais curta e concentrou-se em terminar o estudo de funções de Hash da aula anterior.
12/04/2007 - RSA
Implementação das funções primitivas de geração de chaves, cifragem e decifragem do RSA. Verificação de correcção.
Referências:
Implemente as operações de adiçao e multiplicação sobre corpos finitos F2n, na representação Z2[X]/f(X)Z2[X], onde f(X) é um polinómio primitivo de grau n com coeficientes em Z2.
Implemente as primitivas de cifragem ElGamal? sobre F2n. Use as seguintes funções de conversão:
pol2int(p) = { local(x); x = 2; eval(lift(lift(p))) }
// c e' o polinomio caracteristico
int2pol(u, c) =
{
local(bin_exp, i, n, p);
bin_exp = binary(u);
n = length(bin_exp);
p = 0;
for(i = 1, i <= n, p += bin_exp[i]*x^(n-i));
return( Mod(p, c))
}
Implemente em PARI/GP a geração de chaves RSA assim como as primitivas de cifragem e decifragem RSA.
Implemente também dois esquemas RSA: um sem padding (ou padding a zero) e outro que use a codificação PKCS1.5 (note que, apesar de estar ainda presente no Standard, o seu uso é preterido em favor de esquemas do tipo OAEP).
A sua implementação deverá cobrir as duas possiveis representações de chave privada. Comente adequadamente, optimize o seu código e inclua exemplos de execução.
Como referência, consulte
Os trabalhos deverão ser enviados por email até ao dia 30/4/2007 7/5/2007 (Actualização)
Desafios:
Os seguintes desafios foram todos cifrados sem padding e demonstram algumas más práticas a evitar ou situações susceptíveis de ataque. A dificuldade dos desafios vai aumentando. Duas boas referências para ataques à cifra RSA:
Tente recuperar o texto limpo original correspondente a cada um dos criptogramas RSA apresentados. O texto limpo foi dividido em blocos de k/8 caracteres, onde k é o tamanho do módulo RSA usado e codificando cada caractér com base no seu código ASCII(consulte as funções Vecsmall e Strchr). Na implementação foram usadas as funções de conversão de dados OS2IP e I2OSP para converter as strings de octetos em inteiros para uso das primitivas RSA e vice-versa (ver documentação acima). Em particular, os criptogramas estão apresentados como blocos de strings de octetos (em hexadecimal). Note ainda que números grandes podem estar partidos em várias linhas.
Submeta as scripts de código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Problema 1
e = 5
N = 35875741929544272310671414455212431786075877142865793354192228749439203035201
N = 108903268357736455066815314680962453042814775006206492721678475969098339196867933859146494098327681608326859558107942644645772721578023786494435786218535101121749241579474189946833477645334025671200309042702672365522909567221414902258969417441836884119829449701459194027075720926766820866417694789983660054201
Problema 3 - Uma mesma mensagem M foi cifrada para três destinatários distintos com chaves públicas, respectivamente, (NA, e), (NB, e) e (NC, e).
e = 3
NA = 112210881912528832873488730897626192705473369219616538753081704551444228287799270549518183502360744345023340823731796310204518371544839019675852328331644980384851027727542434889929546615023950787072012130050158370679942353686548079806643019023318116196111524880623908853557168750513262508514183295567563396901
CA = 5d f0 ba 37 0c ed 20 7b ef 9c 80 f2 fa e3 b7 9891 44 ed 3f 34 5f a8 df 60 92 bb a1 c0 5b 2c ee4b db b8 8a 91 e3 f2 4e 77 1f 5a 9a e0 12 68 e13d d5 8a 8a 29 be 59 fc c6 e1 b5 ed ed 50 c6 1a28 75 76 59 c5 d9 0c 13 05 8e f2 77 09 5b 04 5690 2e bc d5 bc 40 84 d0 11 6e 32 d1 7b 80 78 dfca 9d 5c 53 26 ec 89 77 8f d0 25 c6 0b a4 4e feb6 19 10 15 17 67 58 fa 58 5d 3a 29 bb ad 80 7d
NB = 120392098486560881218868530337975928170828473709788575687002424422185252096337743704094351935139811404555600639609802793137996257833314068179655039692270490823980274420626465969667005417243382186000618918556258697621082514239398884970118558437792199690407736712811686600001659384083176017014815881112323115387
CB = 8b ba 35 a0 e2 39 4b 76 b4 36 56 bc 59 c7 6b 4245 a3 e2 86 55 a7 2b bb 6c 2f 03 62 4d 22 da aedc fc 07 07 82 c8 00 07 bc a4 ec a6 76 9d cf c62c 78 1d 1c 51 11 8a ea e9 11 6b 12 1c 55 33 7228 ca 49 ee 1c 8c d7 f2 33 57 e9 72 38 91 11 b0b9 35 6b 40 ce b3 5f fa 10 a8 29 1a 5e 3a a9 eef4 57 af 37 a5 d7 a3 61 ec 4a d4 b9 08 22 f4 7a41 bb 0e 7b d4 23 87 1c 79 0d da 49 ad 00 d5 7b
CC = 21 a3 3d bf e5 45 28 a2 a6 dd 2c cd be 3d fd 3c66 29 1c f5 1e 09 6d e6 0d fd 9f 24 47 39 f7 4814 e0 4d b6 0b f6 09 51 c9 d7 f3 d8 e5 04 ac 5872 d3 63 87 3c 78 f1 76 b9 95 69 63 3e 69 a5 44c0 a7 5e f7 1a 5c fe c8 81 10 19 04 74 d5 3b f497 0f 9e a0 23 e8 1b d4 6d 4d 3a 87 4c d6 5e 0b41 df fe cd 03 6d fb f3 df 4f 08 fe 7e e9 ef 6ea7 57 3b 73 ab cb d2 47 21 ef c2 17 e4 50 2c 77
Problema 4 - Uma entidade gerou dois pares de chaves (eA, dA), (eB, dB) com o mesmo módulo N. O criptograma C resultou de cifrar uma mensagem M com a chave pública(N, eA). O par (eB, dB) é-lhe conhecido.
eA = 7
eB = 65537
dB = 39416603088039895887964060371334748707670181869271319109960477347702105880619234458420932298926540265854465032835901877079191136362559604774232491527176499431785446660397131847396979242313155809991190995078195729830849959370439753585648748394681408327383892352649528455574857326003405818818014111476249182273
N = 93190689631344540288943023973887641632560631643810766252145736072740004080019580400488190478887037135761330261795328330380192983542318499931056089365677012269003911821768807536897426827550265402624038513510004795691089654752469031026657789356395540174230174770649063948079509069830480072323583374601495530559
C = 80 f8 31 9a 3c 3c 59 e3 a3 50 58 15 18 72 d2 d69a ce 3e d9 8e a0 69 55 55 dc 7e 65 63 ce 3d f1a2 c2 d1 79 dd 71 e0 a8 dc b9 8d 85 61 63 fb c6fb 86 e0 a2 4d 53 6b c5 29 8d c8 a6 82 12 4c a2a2 7c 0f db ee 1a cb 0b 82 5e 66 ec dc 8d e1 acf9 d0 5b 9f 6a 35 85 f7 99 1a 63 39 9c 10 2d c772 1b 22 ca 55 e4 a9 51 77 04 4f dd bd b0 a9 9c59 8b a6 77 21 d8 e4 01 ef 87 60 45 48 1a 4b f1
Problema 5
e = 27812569046454244824320816342425551314965950198963961226616524831852818707612280200369494571182920614986907740197159710639233959936262113097762464847197158410910541780972991512038058297628122165933139343626891495473809004783722872564491919727681115482747001462621144735141539925656762024582802558939120369493
N = 139062845232271224121604081712127756574829750994819806133082624159264093538061401001847472855914603074934538700985798553196169799681310565488812324235985815731186882762045899073877401244364116654117446111538205094395819407032486519844416577739385388519998726871321612903150483200686546285155751607596546340899
C = 77 81 2f 94 ed 89 d2 3a 00 fd 62 99 c8 2a e0 61b1 bb f7 9a b8 80 24 9e 9f c2 22 a4 dc 7d 34 3269 f0 cd 2f 71 87 d1 13 64 7b c3 3d b5 30 bb d064 99 fc c9 67 40 c6 eb 1b 5f df aa 1b c5 0f 2450 b4 de 42 54 0f 52 fb ab 05 c3 89 4a 84 c9 8cae c1 c2 42 21 03 93 63 e6 3b da 64 2b 99 38 d2b4 06 1b 67 59 cd 66 b9 b9 14 8b ea 93 15 57 47a2 b9 db 45 08 2a 07 9f 4b b2 34 31 b9 03 99 8f
Trabalho 2: Funções sobre GF(2n) e GF(2)n
No que se segue, cp é um polinómio característico de GF(2n), B é uma base de GF(2n) e (.)~: GF(2n) -> GF(2)n denota a representação vectorial de um elemento x de GF(2n) segundo a base B, isto é, x = B.x~. A representação xs (respectivamente, As) denota o vector (ou matriz) cujas componentes são dadas por xs[i] = sigi(x) (respectivamente, As[i,j] = sigj(A[i])), sigi o automorfismo de ordem i.
Igualmente, T é a matriz dos traços cruzados (T[i,j] = tr(bi.bj), bi,bj elementos de B, em que tr(.) denota o traço) e B' = T-1B é a base dual de B.
1. Escreva um programa em Pari que, dado um polinómio característico cp e, opcionalmente, uma base B, construa as várias componentes e funções descritas acima: Bs, T, T-1, B', Bs', (.)~,...
2. Considere a S-box de Rijndael usada no AES Rijndael S-box que define uma transformação afim g~(y~) = H y~ + b~.
Usando as funções anteriores, reconstrua g(y) = b + h.xs, com =h = (H B')st B.
3. Verifique que a sua implementação reflecte o facto 28 na página 184-185 dos apontamentos.
Prazo de entrega:
Os trabalhos deverão ser enviados por email até ao dia 20/7/2007.
--PaulaCristinaValenca? - 11 Jun 2007
A GMP (GNU Multi-Precision Arithmetic Library) e' uma biblioteca que permite efectuar ca'lculos sobre nu'meros com precisao arbitra'ria (inteiros, racionais, e reais) com elevada eficiciencia. E' utilizada, por exemplo como base para a NTL, uma ferramenta para teoria dos nu'meros muito utilizada em criptografia. O que se pretende neste projecto e' o desenvolvimento de uma interface que permita tirar partido das funcionalidades de calculo sobre Z e Zp implementadas na GMP dentro de programas Haskell. A interface devera' ser o mais transparente possi'vel: devera' ser natural para um programador em Haskell. Os beneficios de eficiencia deverao ser medidos atrave's da implementacao de alguns algoritmos criptogra'ficos e.g. RSA, El-Gamal que operem sobre n'umeros de tamanho realista. A GMP pode ser obtida em http://www.swox.com/gmp/.
A esteganografia e' a ciencia de esconder informacao, de forma segura, em suportes digitais, como sejam ficheiros de imagem. O que se pretende com este projecto ´e o estudo da esteganografia como tecnologia de suporte `a comunicacao segura, no sentido criptogr´afico do termo. Depois de uma an´alise de bibliografia relevante, o objectivo ser´a a implementacao de um sistema de troca de informacao segura com base em t´ecnicas de esteganografia.
Pretende-se com este projecto implementar uma livraria em JAVA que possa ser utilizada em sistemas de votacao electr´onica. A livraria dever´a conter implementacoes das primitivas criptogr´aficas utilizadas nas diversas variantes deste tipo de sistemas: nao s´o cifras, mas tamb´em esquemas mais complexos como blind signatures, bit commitments, provas de conhecimento zero, etc. Na fase final dever´a ser desenvolvido um pequeno applet que exemplifique as potencialidades da biblioteca desenvolvida.
Sumário: Assinaturas digitais, identificação de agentes, protocolos de conhecimento zero, mecanismo desafio-resposta. -- ManuelBernardoBarbosa - 20 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Segurança teórica de cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 06 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 30 Mar 2006.
Sumário: Implementação de CBC a partir de ECB sobre openssl. Segurança teórica de cifras simétricas. -- ManuelBernardoBarbosa - 23 Mar 2006
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB -- ManuelBernardoBarbosa - 16 Mar 2006.
Sumário: Implementação em C de cifragem RC4. Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 9 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 2 Mar 2006.
Para consultar o exame da época especial, contactar o docente da disciplina. -- -- ManuelBernardoBarbosa - 20 Set 2007
Os exames de recurso poderão ser cunsultados na 5a feira dia 26 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 25 Jul 2007
O exame oral realizar-se-á na 2a feira, dia 9 de Julho, às 15:00, no Departamento de Informática em Gualtar/Braga. O aluno em questão deverá contactar o docente por e-mail, no caso da existência de algum impedimento à realização do exame oral nesta data. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da 2a chamada poderão ser consultados na 2a feira dia 9 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da primeira chamada poderão ser consultados na aula de dúvidas de 5a feira. -- ManuelBernardoBarbosa - 27 Jun 2007
Haverá uma aula de dúvidas de Criptografia, antes do exame da 2a chamada. Terá lugar na 5a feira, dia 28 de Junho, às 16:00, na sala de aula onde decorreram as aulas da disciplina. -- ManuelBernardoBarbosa - 26 Jun 2007
Todos os grupos irão apresentar os projectos no dia 26 de Junho.
Apesar de o exame estar marcado para a parte da manhã, por conveniência dos docentes as apresentações terão lugar de tarde, a partir das 14:30 no laboratório das aulas da disciplina.
Cada grupo deverá enviar por e-mail o relatório até às 12:00 do dia 26, para que seja possível faze-lo chegar a todos os docentes atempadamente.
No laboratório, cada grupo deverá entregar o relatório em papel e disporá de 15 minutos para apresentar o projecto, podendo recorrer a uma apresentação projectada se assim o entenderem os seus elementos.
No final haverá lugar para 15 a 20 minutos de perguntas individuais.
O escalonamento das apresentações será o seguinte:
As entregas dos relatórios e apresentações dos trabalhos serão realizadas nas datas reservadas para os exames da época normal da disciplina: 11 de Junho (T) e 26 de Junho (M). As entregas terão lugar no laboratório onde decorrem as aulas da disciplina. Os alunos poderão optar por qualquer uma destas datas para efectuar a entrega, devendo para esse efeito enviar um e-mail até 24 horas antes da hora da apresentação.
A deadline para entrega do relatório intermédio é 6a Feira dia 30 de Março às 23:59. Os relatórios, em formato PDF, deverão ser enviados por e-mail para Manuel Bernardo Barbosa. Deverão descrever, nomeadamente:
O estado actual do projecto.
O resultado da análise de requisitos.
Uma proposta de arquitectura.
Uma descrição das tecnologias a adoptar.
Um planeamento temporal da implementação do projecto.
Uma descrição das decisões de implementação já tomadas em cada uma das componentes tecnológicas abordadas no projecto.
Ter obtido aprovação em Laboratórios de Comunicações II e IV e frequentado Laboratórios de Comunicações I , III e V.
Resultados da aprendizagem
Competências gerais:
Utilizar correctamente o ambiente laboratorial, incluindo os seguintes equipamentos: computadores ligados em rede (LAN), comutadores Ethernet e routers IP.
Descrever os principais protocolos de encaminhamento interno e externo utilizados na Internet;
Descrever os principais protocolos de encaminhamento multicast usados nas redes IP;
Descrever soluções capazes de dotar a Internet de qualidade de serviço (QoS? );
Descrever protocolos, técnicas e algoritmos para sistemas de criptografia.
Competências específicas:
Montar e configurar uma rede de computadores de área local, baseada em tecnologia IEEE 802.3 (Ethernet), envolvendo:
Sistema de cablagem
Instalação e configuração de elementos activos de nível 2 (comutadores Ethernet)
Estabelecer uma rede IP, envolvendo:
Instalação e configuração de elementos de nível 3 (router IP)
Instalação e configuração de serviços DHCP e NAT
Instalar e configurar um serviço DNS.
Criar e manipular uma base de dados (localmente e remotamente)
Utilizar serviços básicos de segurança.
Organização e Funcionamento
O projecto será desenvolvido em grupos de 2 alunos dentro e fora das aulas da disciplina (2 sessões semanais de 2 horas cada).
Nos pontos de controlo a definir e no fim do semestre, cada grupo apresentará à equipa docente e à turma o trabalho realizado e os resultados obtidos, devendo entregar um relatório técnico de desenvolvimento devidamente estruturado e fundamentado.
Em cada aula estarão presentes dois docentes que irão esclarecendo questões específicas dentro da sua área de trabalho.
Avaliação
A nota final será calculada aproximadamente de acordo com a seguinte expressão:
Nota Final = 0.3 Q + 0.2 RI + 0.3 RF + 0.2 AF
Em que a descrição de cada parâmetro é a seguinte:
Q - Testes de avaliação contínua efectuados em algumas aulas laboratoriais.
RI - Relatório intermédio - Pequeno relatório que apresentará já a estrutura do relatório final a apresentar a meio do semestre.
RF - Relatório final - Este relatório reflectirá todo o trabalho desenvolvido durante o semestre nesta disciplina.
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ...
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ...
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ...
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ...
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ...
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ...
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ...
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ...
Notícias 2007 2008 Criptografia Aplicada Criptografia e Segurança da Informação (Edição 2006 2007, Edição 2005 2006, Edição 2004 2005) Equipa Docente Jos ...
Criptografia (MICEI) / Segurança e Privacidade de Sistemas de Armazenamento e Transporte de Dados (MSDPA) Ano Lectivo 2006 2007 Ano Lectivo 2006 2007 Docente ...
Notícias Education.Criptografia (MICEI) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA) 2004 2005 Docente AlcinoCunha ...
Para consultar o exame da época especial, contactar o docente da disciplina. ManuelBernardoBarbosa 20 Set 2007 Os exames de recurso poderão ser cunsultados na ...
Projectos de Opção III 2006/2007 Todos os seguintes projectos serão orientados por MBB ou JBA conjuntamente com um elemento da empresa Multicert. Microsoft Office ...
Notas saíram as notas da 1ª chamada PaulaCristinaValenca 27 Jul 2007 JOIN'07 devido a estar a decorrer as join'07, não haverá aula dia 10/05. PaulaCristinaValenca ...
Projectos a data limite para a entrega dos projectos (protocolo Multicert/UM ) é 30 de Setembro de 2006. JoseBacelarAlmeida 11 Set 2006 Classificações As ...
Notícias Elementos/Fundamentos de Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º ...
27 Jul Já sairam as notas da época de recurso. 15 Jul Já sairam as notas da época normal. 1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem ...
Sessões laboratoriais de EC 5ª feira, 16:00 18:00, DI 1.04 01/03/2007 Introdução ao PARI/GP Esta sessão é acompanhada de um documento PDF que apresenta uma vers ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Education.Criptografia Aplicada 2004 2005 Notas Notas do exame de recurso (contactar MBB por e mail para agendar exame oral) Notas dos trabalhos ...
Notícias Criptografia Aplicada 2006 2007 (Edição 2005 2006, Edição 2004 2005) Notas Notas da época especial Notas da Época de Recurso Notas do exame ...
Sessões laboratoriais de CA (2007/2008) #AulaUm Aula 1 Ambiente de Desenvolvimento O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento ...
Mini Projectos Projecto 4: Site para intranet com autenticação baseada em Certificados X509 Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro ...
22 02 2008 Já estão disponíveis as notas do exame de recurso. DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2 105). 28 01 2008 Já estão dispon ...
Para consultar os exames da época especial, contactar mbb. ManuelBernardoBarbosa 20 Set 2007 Consultas a exames de recurso: 4a Feira, dia 28 de Fevereiro, entre ...
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da ...
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ...
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ...
Já estão disponíveis as notas do exame de recurso ManuelBernardoBarbosa 23 Fev 2006 Para consultar os exames, contactar docente na segunda feira dia 6 de ...
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da ...
Para consultar os exames da época especial, contactar mbb. ManuelBernardoBarbosa 20 Set 2007 Consultas a exames de recurso: 4a Feira, dia 28 de Fevereiro, entre ...
22 02 2008 Já estão disponíveis as notas do exame de recurso. DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2 105). 28 01 2008 Já estão dispon ...
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ...
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ...
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ...
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ...
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ...
Notícias Education.Criptografia Aplicada 2004 2005 Notas Notas do exame de recurso (contactar MBB por e mail para agendar exame oral) Notas dos trabalhos ...
Notícias Criptografia Aplicada 2006 2007 (Edição 2005 2006, Edição 2004 2005) Notas Notas da época especial Notas da Época de Recurso Notas do exame ...
Notícias 2007 2008 Criptografia Aplicada Criptografia e Segurança da Informação (Edição 2006 2007, Edição 2005 2006, Edição 2004 2005) Equipa Docente Jos ...
Mini Projectos Projecto 4: Site para intranet com autenticação baseada em Certificados X509 Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro ...
Sessões laboratoriais de CA (2006/2007) Aula 1 Arquitectura Cliente Servidor Pretende se construir uma plataforma que permita a um número arbitrário de clientes ...
Sessões laboratoriais de CA (2007/2008) #AulaUm Aula 1 Ambiente de Desenvolvimento O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento ...
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ...
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ...
14 Out As notas do exame de recurso já saíram. 25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram ...
Sumário: IPSec e Secure Sockets Layer (SSL/TLS). ManuelBernardoBarbosa 2 Jun 2006 Sumário: On Line Certificate Status Protocol. ManuelBernardoBarbosa ...
Notícias Education.Criptografia (MICEI) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA) 2004 2005 Docente AlcinoCunha ...
Criptografia (MICEI) / Segurança e Privacidade de Sistemas de Armazenamento e Transporte de Dados (MSDPA) Ano Lectivo 2006 2007 Ano Lectivo 2006 2007 Docente ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Elementos/Fundamentos de Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º ...
27 Jul Já sairam as notas da época de recurso. 15 Jul Já sairam as notas da época normal. 1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem ...
Projectos a data limite para a entrega dos projectos (protocolo Multicert/UM ) é 30 de Setembro de 2006. JoseBacelarAlmeida 11 Set 2006 Classificações As ...
Notas saíram as notas da 1ª chamada PaulaCristinaValenca 27 Jul 2007 JOIN'07 devido a estar a decorrer as join'07, não haverá aula dia 10/05. PaulaCristinaValenca ...
Projectos Os projectos aqui propostos deverão ser apresentados sobre a forma de monografia. De uma forma genérica, consistem no aprofundamento de um determinado tema ...
Elementos de Education.Criptografia Trabalho Prático 1 (9 Mar) Efectue a criptoanálise destes quatro criptogramas que foram obtidos recorrendo a cifras de substitui ...
Sessões laboratoriais de EC 5ª feira, 14:00 16:00, DI 1.04 23/02/2006 Apresentação Apresentação e inscrição nos turnos. 02/03/2006 Introdução ao ao PARI ...
Sessões laboratoriais de EC 5ª feira, 16:00 18:00, DI 1.04 01/03/2007 Introdução ao PARI/GP Esta sessão é acompanhada de um documento PDF que apresenta uma vers ...
Trabalhos Práticos de EC 2006/2007 Trabalho 1: Cifra RSA Implemente em PARI/GP a geração de chaves RSA assim como as primitivas de cifragem e decifragem RSA ...
Sumário: Entrega de trabalhos práticos. ManuelBernardoBarbosa 6 Jun 2006 Sumário: On Line Certificate Status Protocol (OCSP) e Secure Sockets Layer (SSL) ...
Para consultar o exame da época especial, contactar o docente da disciplina. ManuelBernardoBarbosa 20 Set 2007 Os exames de recurso poderão ser cunsultados na ...
Projectos de Opção III 2006/2007 Todos os seguintes projectos serão orientados por MBB ou JBA conjuntamente com um elemento da empresa Multicert. Microsoft Office ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/Criptografia web. This is a convenient service, so you ...
Education/Criptografia Web Preferences The following settings are web preferences of the Education/Criptografia web. These preferences overwrite the site level ...
TWiki's Education/Criptografia web /view/Education/Criptografia The Education/Criptografia web of TWiki. TWiki is a Web Based Collaboration Platform for the Corporate ...
Workshop em Segurança da Informação Departamento de Informática da Universidade do Minho 23 de Fevereiro de 2007 Apresentação A Workshop em Segurança de Informa ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/Criptografia web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom? (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
Related topics:WebChangesAlert, TWikiUsers, TWikiRegistration
The following settings are web preferences of the Education.Criptografia web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, eg: TWikiGuest in the Main web).
Preferences:
If yes, set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/Criptografia.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Criptografia @ DI
Set SITEMAPUSETO =
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
Set NOAUTOLINK =
Note: Use the [[...][...]] syntax to link topics in case you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #FFFFC0
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #99CC00 .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/Criptografia web
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia
The Education/Criptografia web of TWiki. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/Criptografia
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia
/twiki/pub/Main/LocalLogos/um_eengP.jpgCSSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI0809
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ... (last changed by ManuelBernardoBarbosa)2009-09-29T17:01:09ZManuelBernardoBarbosaCSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSI0809
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ... (last changed by JoseBacelarAlmeida)2009-07-22T01:44:11ZJoseBacelarAlmeidaAvisosCSSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/AvisosCSSI0809
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ... (last changed by ManuelBernardoBarbosa)2009-07-13T18:34:50ZManuelBernardoBarbosaCriptografiaBiomedica0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptografiaBiomedica0809
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ... (last changed by JoseBacelarAlmeida)2009-07-02T17:11:58ZJoseBacelarAlmeidaCriptoBio0809Programa
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBio0809Programa
Criptografia (MIEBIO) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia Conceitos ... (last changed by JoseBacelarAlmeida)2009-07-02T16:56:53ZJoseBacelarAlmeidaCSSI-PI0809-2
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI-PI0809-2
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ... (last changed by JoseBacelarAlmeida)2009-07-01T16:24:30ZJoseBacelarAlmeidaCSSI-PI0809-1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI-PI0809-1
Projecto Integrador Sumários (1º Sem.) MI CSSI (2008/2009) 30/09/2008, 18:00 20:00 Ambiente de Desenvolvimento Utilização do framework JCA/JCE . Continua ... (last changed by JoseBacelarAlmeida)2009-07-01T15:49:03ZJoseBacelarAlmeidaCSI0809Programa
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSI0809Programa
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ... (last changed by JoseBacelarAlmeida)2009-07-01T11:30:37ZJoseBacelarAlmeidaElementosCriptografia0506
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/ElementosCriptografia0506
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ... (last changed by JoseBacelarAlmeida)2009-05-14T23:35:16ZJoseBacelarAlmeidaAvisosCriptoBio0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/AvisosCriptoBio0809
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ... (last changed by JoseBacelarAlmeida)2009-02-04T05:08:43ZJoseBacelarAlmeidaCriptoBioT0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBioT0809
Criptografia Mestrado Integrado em Engenharia Biomédica Sumários das aulas Teóricas (2008/2009) Aula 1: 18/09/2008 Apresentação da disciplina. Aula 2: 25/09 ... (last changed by JoseBacelarAlmeida)2008-12-13T23:16:09ZJoseBacelarAlmeidaCriptoBioTP0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBioTP0809
Criptografia Mestrado Integrado em Engenharia Biomédica Guiões das aulas Teórico Práticas 2008/2009 Aula 1: 18/09/2008 Apresentação da disciplina. Aula 2: ... (last changed by JoseBacelarAlmeida)2008-12-11T10:56:57ZJoseBacelarAlmeidaCSITP0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSITP0809
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ... (last changed by JoseBacelarAlmeida)2008-12-07T22:56:31ZJoseBacelarAlmeidaCriptografiaBiomedicaProj0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptografiaBiomedicaProj0809
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ... (last changed by JoseBacelarAlmeida)2008-12-05T22:56:47ZJoseBacelarAlmeidaCSIT0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSIT0809
Conceitos de Sistemas Criptográficos (T) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 14:00 16:00 Apresentação do Módulo: programa, organizaç ... (last changed by JoseBacelarAlmeida)2008-11-25T22:26:05ZJoseBacelarAlmeidaWebSideBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/WebSideBar
Disciplinas Criptografia (Biomédica) CSSI Outras Avisos " else ""}% (last changed by JoseBacelarAlmeida)2008-10-05T21:13:35ZJoseBacelarAlmeida
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação).
15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação).
03/03: Disponíveis notas finais do módulo de CSI.
07/02: Data/Hora do teste de CSSI -- 10/02/2009 às 16:00.
12/01: As apresentações de PI de 3ª (13/01) terão início às 14:30.
12/01: Disponível avaliação prática de CSI.
19/12: As entregas/apresentações dos segundos projectos de PI ficam marcadas para o dia 13 de Janeiro pelas 14:00.
19/12: As aulas de reposição do módulo de SSI serão no dia 6 de Janeiro às 14:00.
10/11: Nova versão dos slides de técnicas criptográficas.
21/10: Já está disponível a primeira parte dos apontamentos do módulo de técnicas criptográficas.
05/10: A aula de TC no dia 07/10 começa somente às 10:00.
03/02/2009: Já estão disponíveis as notas do teste.
12/01/2009: Já está disponível a avaliação prática da disciplina.
30/12/2008: Sessão de defesa dos trabalhos será a 06/01/2009, pelas 10:00. A data limite para entrega (por email) é às 0:00 de 05/01/2009.
24/09/2008: Versão recomendada do Eclipse: Eclipse IDE for Java EE Developers (162 MB)
Já estão disponíveis as notas do exame de recurso -- ManuelBernardoBarbosa - 23 Fev 2006
Para consultar os exames, contactar docente na segunda feira dia 6 de Fevereiro entre as 14 e as 15 horas. -- ManuelBernardoBarbosa - 2 Fev 2006
Já estão disponíveis as notas do exame da 2a Chamada. -- ManuelBernardoBarbosa - 31 Jan 2006
Já estão disponíveis as notas do exame da 1a Chamada. -- ManuelBernardoBarbosa - 16 Jan 2006
As entregas dos trabalhos práticos terão lugar na 6a Feira dia 6 de Janeiro. A partir de 3a Feira dia 27 de Dezembro estará disponível na recepção do DI uma folha de inscrições. Cada docente receberá os trabalhos dos alunos do seu turno (em caso de grupos mistos é indiferente).
Já estão disponíveis as notas do exame da época especial. -- ManuelBernardoBarbosa - 13 Nov 2005
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da tarde. -- ManuelBernardoBarbosa - 19 Jan 2005
Está já disponível o material de apoio ao trabalho prático. -- ManuelBernardoBarbosa - 9 Nov 2004
22-02-2008 Já estão disponíveis as notas do exame de recurso.
DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2-105).
28-01-2008 Já estão disponíveis as notas do 2º teste.
18-01-2008 A direcção de curso confirmou a data de 23-01-2008 (9:00, CP2111) para o teste de CA.
14-01-2008 Notas dos Mini-Projectos.
26-12-2007 Notas do teste intermédio.
27-11-2007 Já está disponível o enunciado do projecto prático.
20-11-2007 Estão disponíveis dois novos mini-projectos (aqui).
08-11-2007 O teste intermédio será no dia 13 de Novembro (3a-feira) às 17:00 - sala CP1206.
16-10-2007 Já está disponível o enunciado do primeiro mini-projecto (aqui).
16-10-2007 O teste intermédio será na semana de 12 a 17 de Novembro. O teste final na semana de 21 a 26 de Janeiro.
08-10-2007 As listas de inscritos nos turnos práticos encontram-se aqui.
20-09-2007 As notas da época especial estão disponíveis no site do ano anterior.
18-09-2007 Dado que ainda estão a decorrer exames de disciplinas de LESI, não haverá aula de CA hoje (18-09-2007).
Conceitos de Sistemas Criptográficos (T) - Sumários
MI-CSSI (2008/2009)
Aula 1 - 30/09/2008, 14:00 - 16:00
Apresentação do Módulo: programa, organização das aulas, critério de avaliação, referências bibliográficas.
Conceitos básicos e terminologia: criptografia, cripto-análise, segurança da informação. Breve apresentação das técnicas criptográficas modernas.
Aula 2 - 07/10/2008, 14:00 - 16:00
Cifras simétricas Sequenciais: características; cifras sequenciais síncronas e auto-sincronizáveis. Exemplos de cifras sequenciais: A5/1, RC4.
Cifras simétricas por Blocos: características; modos de operação (ECB, CBC, OFB, CFB, CTM).
Aula 3 - 14/10/2008, 14:00 - 16:00
Apresentação detalhada das cifras por Blocos DES e AES. Referência a técnicas cripto-análise.
Funções de Sentido Único: conceito e construções básicas. Funções de Hash Criptográficas: desenho e exemplos (MD5, SHA-1). Aplicações de funções de hash em geradores de números aleatórios; key generation functions.
Aula 4 - 21/10/2008, 14:00 - 16:00
Criptografia Assimétrica: motivação e apresentação do conceito. Protocolo de acordo de chaves Diffie-Hellman e análise de segurança perante adervesários passivos e activos. Cifras de Chave Pública e envelopes digitais. Assinaturas Digitais.
Aula 5 - 28/10/2008, 14:00 - 16:00
Algoritmos de criptografia assimétrica: problemas matemáticos utilizados na construção de funções de sentido único com segredo. Exemplos de algoritmos: RSA, El-Gamal, DSA.
Certificação e Public Key Infrastructure: estrutura dos cretificados X509; processo de pedido de certificados; utilização de certificados para assinatura digital e envelopes digitais; regogação (CRL). Esquemas alternativos/complementares de certificação (certificados de atributos; rede de confiança PGP; SPKI/SDSI).
O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento Java que será utilizado durante o curso.
Como actividade de programação (para experimentar o ambiente escolhido), deve desenvolver uma pequena aplicação que leia um ficheiro de texto (nome do ficheiro passado como argumento), e escreva para stdout o seu conteúdo com todas as letras maiúsculas.
Aula 2 - 07/10/2008, 16:00 - 18:00
Cifra de ficheiro utilizando JCA/JCE
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. AES no modo CBC). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma cifra mais simples (e.g. RC4) e uma chave secreta fixa definida no código na forma de um array de bytes (i.e. implementar somente as opções -enc e -dec). Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
Um segundo passo deverá consistir na implementação da opção -genkey. Aí surge o problema de guardar a chave no sistema de ficheiros: vamos começar por adoptar a solução mais simples (e insegura) - guardar a chave directamente num ficheiro.
Por último, iremos guardar a chave num contentor apropriado (protegido por uma password). Para tal devemos utilizar uma KeyStore disponibilizada pela JCA que permita o armazenamento de chaves secretas (tipo "JCEKS" ou "PKCS12").
Pretende-se adaptar a aplicação desenvolvida para responder aos seguintes requisitos:
O objectivo é fazer uso da aplicação para cifrar um conjunto de ficheiros (potencialmente grandes);
A chave utilizada nessas operações de cifra deve estar devidamente protegida;
Se algum dos ficheiros cifrados for manipulado (alterado), o programa deverá detectar essa ocorrência ao decifrar.
Aula 4 - 21/10/2008, 16:00 - 18:00
Acordo de Chaves
As classes Cliente, Servidor e TServidor implementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Para o efeito, deverá considerar a cifra/modo que considerar mais apropriado.
Estabelecer o segredo através da execução do protocolo de acordo de chaves Diffie-Hellman. Para o efeito deverá utilizar:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
(obs.: No JCA Reference Guide está disponível um exemplo com a codificação do protocolo Diffie-Hellman.)
Algumas classes relevantes:
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade análoga à do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas:
Alice -> Bob : g^x
Alice <- Bob : g^y, SB(g^x, g^y)
Alice -> Bob : SA(g^x, g^y)
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Segurança de Sistemas Informáticos (SSI) - 1º Semestre
Tópicos de programação segura com ênfase no dimensionamento de privilégios, protecção de dados, stack e sandbox de execução.
Técnicas, ferramentas e boas práticas de administração na operação segura de sistemas informáticos.
Perímetros de segurança como elementos estruturantes na no comparticionamento de acesso e protecção dos recursos do sistema.
Redundância, fail-over, salvaguarda e reposição de dados e serviços como técnicas para melhoria da disponibilidade e segurança de operação de sistemas informáticos.
Análise forense aplicada à detecção e avaliação de situações de comprometimento de segurança de sistemas.
Introdução às primitivas, esquemas e protocolos criptográficos mais relevantes como blocos construtivos de funcionalidades de segurança em sistemas informáticos.
Certificação digital e a utilização de Infrastruturas de Chave Pública.
Aplicações correntes/comerciais da criptografia.
Projecto Integrado - 1º e 2º Semestres
Seminário/Gestão da Segurança da Informação (Sem+GSI) - 1º e 2º Semestres
Aspectos legais da segurança da informação.
Privacidade e protecção de dados pessoais.
Gestão da confiança.
Auditoria e acreditação de segurança.
Técnicas Criptográficas - 2º Semestre
Noções fundamentais da criptografia: computabilidade, conhecimento e aleatoriedade, confiança e provas probabilísticas.
Teoria matemática básica: estruturas algébricas relevantes e teoria dos números.
Primitivas criptográficas: cifras e sua criptoanálise, sistemas de chave pública, sistemas orientados à identidade.
Esquemas criptográficos: modelos e provas de segurança.
Paradigmas de Sistemas Confiáveis - 2º Semestre
Modelos de faltas
Coordenação distribuída
Paradigma transaccional
Comunicação em grupo fiável
Replicação por software
Critério de Avaliação
A avaliação final da UCE é composta pelas seguintes componentes (todas com nota mínima de 10 valores):
Teste escrito (60%)
Avaliação do Projecto (30%)
Seminário (10%)
Teste escrito
No final de cada periodo lectivo (semestre) é realizado um teste escrito. Esses testes são divididos em duas partes, versando cada uma delas os conteúdos dos módulos leccionados. No final do ano é oferecida a possibilidade de realizar um exame de recurso, podendo aí o aluno escolher que componentes (módulos) pretende repetir.
Teste do 1º Semestre (AS+CSI)
Teste do 2º Semestre (TC+PSC)
Exame Recurso (AS+CSI+TC+PSC)
Projecto Integrador
A avaliação do Projecto Integrador é realizada em dois tempos:
Final do primeiro semestre;
Final do ano.
A apresentação do projecto será acompanhada por um relatório
Apontadores WEB com material de Referência e Tutorials.
Transcreva para o editor do Eclipse, compile e execute o seguinte programa:
/**
* The TWiki.HelloWorldApp class implements an application that
* simply prints "Hello World!" to standard output.
*/
class TWiki.HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
Leia a secção do Java Tutorial referente a este exemplo. Consulte também a documentação referente ao método println (a que classe pertence?).
Para se realizarem programas minimamente interessantes, é necessário conhecer um conjunto básico de conceitos e de classes da biblioteca standard (secções Learning the Java Language e Essential Java Classes)
Aula 3: 02/10/2008
Pretende-se realizar uma pequena aplicação java com a seguinte funcionalidade:
O utilizador, ao invocar o programa, passa também como argumento um nome de um ficheiro de texto fich;
O programa deverá gravar um novo ficheiro fich.out em que converte todas as letras minúsculas em maiúsculas;
No final, deverá imprimir no écran o número total de caracteres e linhas processadas.
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. RC4). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma chave secreta fixa, definida no código na forma de um array de bytes. Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
Jornadas de Engenharia Biomédica. (tolerância de ponto)
Aula 6: 23/10/2008
Continuação da aula de "Cifra de Ficheiro".
Aula 7: 30/10/2008
As classes Cliente, Servidor e TServidor implementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Pretende-se nesta aula modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Escolha para o efeito a cifra/modo que considerar mais apropriado.
Algumas classes relevantes:
O objectivo desta aula é implementar o acordo de chaves Diffie-Hellman directamente em Java (sem recorrer ao framework JCA).
Alice,Bob: acordam nos parâmetros P e G
Alice: gera x tal que 0 ≤ x < P
Alice -> Bob : G^x mod P
Bob: gera y tal que 0≤ y < P
Bob -> Alice : G^y mod P
Alice, Bob: segredo acordado K = G^(xy) mod P = (G^x)^y mod P = (G^y)^x mod P
Utilize a classe BigInteger e codifique cada passo do protocolo explicitamente. Pode começar por utilizar os seguintes parâmetros para o grupo (P tem 1024 bit):
P = 99494096650139337106186933977618513974146274831566768179581759037259788798151499814653951492724365471316253651463342255785311748602922458795201382445323499931625451272600173180136123245441204133515800495917242011863558721723303661523372572477211620144038809673692512025566673746993593384600667047373692203583
G = 44157404837960328768872680677686802650999163226766694797650810379076416463147265401084491113667624054557335394761604876882446924929840681990106974314935015501571333024773172440352475358750668213444607353872754650805031912866692119819377041901642732455911509867728218394542745330014071040326856846990119719675
(obs: só para quem acabou o programa pedido na aula anterior...)
Pretende-se codificar uma nova versão do protocolo de acordo de chaves Diffie-Hellman que faça exclusivamente uso das funcionalidades oferecidas pela JCA, nomeadamente:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
Em JCE Reference Guide está disponível um exemplo de codificação desse protocolo.
APIs:
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade análoga à do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas:
Alice -> Bob : g^x
Alice <- Bob : g^y, SB(g^x, g^y)
Alice -> Bob : SA(g^x, g^y)
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Utilização de certificados X509 em Java
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.pk8
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.pk8
Certificado auto-assinado da autoridade de certificação: ca.crt
A utilização de certificados pressupõe a sua validação. O Java disponibiliza uma API específica que deverá utilizar para o efeito (documentação abaixo). Para facilitar esse estudo recomenda-se o estudo/adaptação de um programa de exemplo que verifica a validade de uma cadeia de certificação: ValidateCertPath.java. Utilizando esse programa, podemos verificar a validade do certificado do servidor através da linha de comando:
java TWiki.ValidateCertPath ca.crt servidor.crt
Uma segunda questão que surgirá neste trabalho é a manipulação dos formatos das chaves: as chaves privadas correspondentes aos certificados fornecidos estão codificadas num formato standard PKCS8. Para se converter esse formato num objecto Java apropriado terá de se utilizar uma instância da classe KeyFactory. O fragmento de código que se apresenta ilustra esse processo:
byte[] encodedKey; // read from file
TWiki.PKCS8EncodedKeySpec keySpec = new TWiki.PKCS8EncodedKeySpec(encodedKey);
TWiki.KeyFactory keyFactory = TWiki.KeyFactory.getInstance("RSA");
TWiki.RSAPrivateKey privKey =
(TWiki.RSAPrivateKey)keyFactory.generatePrivate(keySpec);
Geração de Certificados X509
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
openssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da tarde. -- ManuelBernardoBarbosa - 19 Jan 2005
Está já disponível o material de apoio ao trabalho prático. -- ManuelBernardoBarbosa - 9 Nov 2004
Já estão disponíveis as notas do exame de recurso -- ManuelBernardoBarbosa - 23 Fev 2006
Para consultar os exames, contactar docente na segunda feira dia 6 de Fevereiro entre as 14 e as 15 horas. -- ManuelBernardoBarbosa - 2 Fev 2006
Já estão disponíveis as notas do exame da 2a Chamada. -- ManuelBernardoBarbosa - 31 Jan 2006
Já estão disponíveis as notas do exame da 1a Chamada. -- ManuelBernardoBarbosa - 16 Jan 2006
As entregas dos trabalhos práticos terão lugar na 6a Feira dia 6 de Janeiro. A partir de 3a Feira dia 27 de Dezembro estará disponível na recepção do DI uma folha de inscrições. Cada docente receberá os trabalhos dos alunos do seu turno (em caso de grupos mistos é indiferente).
Já estão disponíveis as notas do exame da época especial. -- ManuelBernardoBarbosa - 13 Nov 2005
Introdução ao conceito de Zero-Knowledge para identificação e explicação da segurança do protocolo Schnorr: capítulo 10 do livro "Handbook of Applied Cryptography", disponível aqui.
Propriedades das funções de hash e a relação com ataques por força bruta e birthday attacks: wikipedia aqui.
22-02-2008 Já estão disponíveis as notas do exame de recurso.
DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2-105).
28-01-2008 Já estão disponíveis as notas do 2º teste.
18-01-2008 A direcção de curso confirmou a data de 23-01-2008 (9:00, CP2111) para o teste de CA.
14-01-2008 Notas dos Mini-Projectos.
26-12-2007 Notas do teste intermédio.
27-11-2007 Já está disponível o enunciado do projecto prático.
20-11-2007 Estão disponíveis dois novos mini-projectos (aqui).
08-11-2007 O teste intermédio será no dia 13 de Novembro (3a-feira) às 17:00 - sala CP1206.
16-10-2007 Já está disponível o enunciado do primeiro mini-projecto (aqui).
16-10-2007 O teste intermédio será na semana de 12 a 17 de Novembro. O teste final na semana de 21 a 26 de Janeiro.
08-10-2007 As listas de inscritos nos turnos práticos encontram-se aqui.
20-09-2007 As notas da época especial estão disponíveis no site do ano anterior.
18-09-2007 Dado que ainda estão a decorrer exames de disciplinas de LESI, não haverá aula de CA hoje (18-09-2007).
Certificados de Chave Pública e Public Key Infrastructure.
Aplicações correntes/comerciais da Criptografia.
Utilização de dispositivos criptográficos portáteis.
Aplicar estes conhecimentos na implementação de sistemas seguros.
Pré-Requisitos
Não havendo pré-requisitos formais, assume-se que os alunos possuem o seguinte conjunto de conhecimentos:
familiaridade com a linguagem JAVA
Critérios de Avaliação
Nota final
Teste Escrito: 60% (nota mínima de 8 valores)
Componente Prática: 40% (opcional, mas a ausência de avaliação prática limita a nota final a 12 valores)
Teste Escrito:
Serão realizados dois testes ao longo do semestre (datas a confirmar):
1º em meados de Novembro (13 de Novembro, às 17:00 - sala CP1206);
2º na época de testes no final do semestre (semana de 21 a 26 de Janeiro).
O exame de recurso compreende toda a matéria.
Avaliação prática
A componente prática da nota resulta da avalição de um ou mais trabalhos práticos. Os alunos podem optar por:
Realizar dois pequenos projectos durante o semestre (serão propostos pelo menos 4 temas). Os prazos serão fixados aquando do anúncio de cada projecto (tipicamente de 1 ou 2 semanas) e a sua defesa será realizada nas aulas práticas.
Um projecto de maior dimensão realizado por grupos de até 3 alunos, onde se pode fazer uso das componentes realizadas durante as aulas práticas. Será entregue e defendido no final do semestre.
Em qualquer uma das modalidades, a entrega consistirá no código desenvolvido e num pequeno relatório do trabalho efectuado.
Programa Resumido
Teórica
Introdução e Terminologia
Criptografia, Criptoanálise e Criptologia
Conceitos de cifra, chave e comunicação segura
Classificação de Ataques
Apresentação de Técnicas Criptográficas
Técnicas Criptográficas
Cifras simétricas (sequenciais e por blocos)
Funções de Hash e Message Authentication Codes
Distribuição e acordo de chaves
Cifras assimétricas e Criptografia de Chave Pública
Projecto 4: Site para intranet com autenticação baseada em Certificados X509
Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro de 2008)
Pretende-se configurar um servidor web para uma intranet de uma instituição. Os requisitos são:
O site irá disponibilizar diferentes áreas para os vários departamentos da instituição. Em cada uma dessas áreas existirão zonas de acesso público e restritas a utilizadores autenticados (do departamento em questão).
Admite-se que cada departamento dispõe de uma CA própria (mas estas não se encontram necessariamente hierarquizadas).
Para certas zonas do site, podem ainda existir critérios de acesso mais restritivos (e.g. só determinados utilizadores podem aceder).
O trabalho consistirá na configuração do web-server para uma instanciação do cenário proposto. Em particular, é parte integrante deste trabalho a geração dos certificados envolvidos (para os diferentes departamentos). No relatório deverão destacar os pontos mais relevantes do desenvolvimento (e.g. fragmentos das scripts de configuração; etc.)
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email. A demonstração ocorrerá na aula prática no próprio dia da entrega (obs: para utilizar os computadores do laboratório terá de instalar no momento todo o software necessário. O mais simples será trazer um portátil com o software já instalado).
Projecto 3: Codificação de esquemas de cifra ou assinatura aleatórios baseados no RSA.
Prazo: 2 semanas (entregue na aula do dia 4 de Dezembro)
Do ponto de vista de segurança, recomenda-se que a utilização de esquemas criptográficos baseados no RSA considerem elementos aleatórios na produção da cifra/assinatura. Exemplos desses esquemas são o RSA-OAEP (cifra) e RSA-PSS (assinatura). Pretende-se neste projecto realizar a codificação de um destes esquemas (à sua escolha) em Java. Para tal deverá seguir a especificação apresentada em PKCS1-v2.1.
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Projecto 2: Construção das tabelas características das S-box do DES.
Prazo: 2 semanas (entregue na aula do dia 4 de Dezembro)
Desenvolver um programa que gere as tabelas características das S-box do DES (utilizadas na cripto-análise diferencial). Recorde-se que essas tabelas registam:
Para cada S-box, qual o número de resultados com uma dada diferença em função das diferenças das entradas (tabela como a apresentada nos slides das teóricas);
Para uma S-box, e determinadas diferenças na entrada e na saída, quais os pares de entrada e saída que são contabilizadas na posição respectiva da tabela anterior.
Sugestão: adapte uma implementação do DES (aí já dispõe da codificação das várias S-box).
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Projecto 1: Abstracção para comunicação com garantias de integridade
Prazo: 1 semana (entregue na aula do dia 23 de Outubro)
Pretende-se desenvolver classes que suportem abstracções análogas à CipherInputStream/CipherOutputStream, mas cuja garantia associada seja a integridade e não a confidencialidade.
Deverá ser escrito um pequeno relatório (4/5 folhas) que discuta as decisões de implementação adoptadas e apresentado um pequeno programa que ilustre a utilização das classes.
Entrega: Uma cópia impressa do relatório deverá ser entregue no final da aula teórica. O código e uma versão electrónica do relatório devem ser enviados por email.
Lista de Alunos:
Pretende-se construir uma plataforma que permita a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Algumas classes relevantes:
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir dois pequenos programas Java: Um primeiro que cifra um ficheiro (e.g. texto_limpo.txt) por intermédio de uma cifra simétrica (e.g. cifra sequêncial RC4). Um segundo que decifra o criptograma obtido para recuperar o texto limpo.
Para simplificar vamos utilizar uma chave secreta fixa, definida no código na forma de um array de bytes, e convertida numa chave secreta adequada utilizando a classe SecretKeySpec.
É também interessante verificar que o criptograma gerado é compatível com outras plataformas que implementam a mesma cifra. O comando seguinte utiliza o openssl para decifrar um ficheiro cifrado com RC4 (a chave tem de ser fornecida em hexadecimal).
Pretende-se completar/modificar o código realizado nas aulas anteriores por forma a que o Cliente comunique de forma segura (confidêncial) com o Servidor. Para tal deve-se utilizar uma cifra por blocos (e.g. AES) num modo de funcionamento apropriado.
Observações:
A escolha do modo deve ser adequado à natureza da conexão entre o cliente e o servidor. Em particular, deve-se tomar em atenção as questões de buffering e sincronização...
Se se optar por uma Stream "interactiva", pode-se optar por CipherOutputStream e CipherInputStream com uma cifra num modo "sequêncial" (obs.: experimente utilizar um modo por blocos para ter percepção sobre os problemas dessa solução...)
Se optar por transmissão assíncrona de objectos, por optar por utilizar SealedObject sobre uma ObjectStream. Nesse caso pode utilizar um modo por blocos (e.g. CBC).
Em qualquer dos casos, terá sempre de tratar da inicialização e transmissão do Initialization Vector.
Estando nós a utilizar uma cifra simétrica, temos de garantir que cliente/servidor acordam na chave utilizada. Para simplificar, podemos admitir que guardamos a chave num ficheiro (gerada por um pequeno programa com base na funcionalidade da classe KeyGenerator) que é disponibilizado a ambos os programas. Adiante, dicutiremos formas mais apropriadas de estabelecer o acordo de chaves entre as partes...
Algumas classes relevantes (para além das já estudadas...):
Aula 4 - Canal seguro entre Cliente/Servidor (continuação)
Pretende-se:
(Se for o caso...) Concluir a implementação da aula anterior;
Implementar estratégia alternativa (CipherStream vs. SealedObject).
Aula 5 - Acordo de chaves Diffie-Hellman
O objectivo desta aula é adicionar à aplicação Cliente/Servidor suporte para o protocolo de acordo de chaves Diffie-Hellman. Para tal deverá ser conveniente estudar/adaptar o programa de exemplo apresentado em JCE Reference Guide (Appendix F).
Novas classes:
Aula 6 - Implementação do protocolo Station to Station
Pretende-se:
(Se for o caso...) Concluir a implementação da aula anterior (acordo de chaves Diffie Hellman);
Complementar o programa de acordo de chaves para incluir a funcionalidade do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma traca de assinaturas (cifrada com a chave de sessão negociada), i.e.:
Alice -> Bob : g^x
Alice <- Bob : g^y, EK(SB(g^y, g^x))
Alice -> Bob : EK(SA(g^x, g^y))
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Tendo já abordado os aspectos de confidencialidade e autenticidade na comunicação Cliente/Servidor, falta-nos considerar a integridade da mensagem transmitida (i.e. garantir que não é possível manipular/alterar a mensagem enquanto em trânsito). Para tal devemos fazer uso de (H)MACs (classe javax.crypto.Mac).
Obs.: Uma sugestão para integrar a utilização de MACs na aplicação existente consiste em seguir a estratégia adoptada em CipherStream ou SealedObject: a de encapsular a sua funcionalidade numa classe responsável pela comunicação...
Aula 8 - Utilização de Certificados em Java
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.der
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.der
Certificado auto-assinado da autoridade de certificação: ca.crt
Para facilitar o estudo da manipulação de certificados X509, disponibiliza-se um programa que verifica a validade de uma cadeia de certificação: ValidateCertPath.java.
Classes requeridas:
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
penssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento Java que será utilizado durante o curso.
Como actividade de programação (para experimentar o ambiente escolhido), deve desenvolver uma pequena aplicação que leia um ficheiro de texto (nome do ficheiro passado como argumento), e escreva para stdout o seu conteúdo com todas as letras maiúsculas.
Aula 2 - Cifra de ficheiro utilizando JCA/JCE
Pretende-se cifrar o conteudo de um ficheiro. Para tal far-se-á uso da funcionalidade oferecida pela JCA/JCE, em particular a implementação de cifras simétricas.
O objectivo é então o de definir um pequeno programa Java que permita cifrar/decifrar um ficheiro utilizando uma cifra simétrica (e.g. RC4). A sua forma de utilização pode ser análoga a:
Para simplificar, pode começar por utilizar uma chave secreta fixa, definida no código na forma de um array de bytes. Nesse caso, deverá utilizar a classe SecretKeySpec para a converter para o formato adequado.
É também interessante verificar que o criptograma gerado é compatível com outras plataformas que implementam a mesma cifra. O comando seguinte utiliza o openssl para decifrar um ficheiro cifrado com RC4 (a chave tem de ser fornecida em hexadecimal).
Aula 3 - Confidencialidade na comunicação Cliente-Servidor
As classes Cliente, Servidor e TServidorimplementam uma aplicação que permite a um número arbitrário de clientes comunicar com
um servidor que escuta num dado port (e.g. 4567). O servidor atribui um número de ordem a cada cliente, e simplesmente faz o dump do texto enviado por cada cliente (prefixando cada linha com o respectivo número de ordem).
Quando um cliente fecha a ligação, o servidor assinala o facto (e.g. imprimindo [n], onde n é o número do cliente).
Exemplo da execução do servidor (que comunica com 3 clientes):
Pretende-se nesta aula modificar as respectivas classes por forma a garantir a confidencialidade nas comunicações estabelecidas. Escolha para o efeito a cifra/modo que considerar mais apropriado.
Algumas classes relevantes:
Aula 4 - Confidencialidade na comunicação Cliente-Servidor (continuação)
Pretende-se nesta aula experimentar o impacto da escolha da cifra/modo na comunicação entre o cliente/servidor. Para tal é conveniente
reforçar a natureza interactiva da comunicação modificando os ciclos de leitura/escrita para operarem sobre um byte de cada vez:
Cliente:
TWiki.CipherOutputStream cos = ...
int test;
while((test=System.in.read())!=-1) {
cos.write((byte)test);
cos.flush();
}
Servidor:
TWiki.CipherInputStream cis = ...
int test;
while ((test=cis.read()) != -1) {
System.out.print((char) test);
}
Experimente agora as seguintes cifras (e modos) e verifique qual o respectivo impacto nas questões de buffering e sincronização:
RC4
AES/CBC/NoPadding
AES/CBC/PKCS5Padding
AES/CFB8/PKCS5Padding
AES/CFB8/NoPadding
AES/CFB/NoPadding
Procure explicar a diferenças detectadas na execução da aplicação.
Obs: Note que em muitos dos modos sugeridos necessita de considerar um IV. Considere para o efeito que o IV é gerado pelo cliente e enviado em claro para o servidor (no início da comunicação).
Algumas classes relevantes (para além das já estudadas...):
O objectivo desta aula é implementar o acordo de chaves Diffie-Hellman. Algumas sugestões para atacar o problema:
Comece por utilizar a classe BigInteger e codifique cada passo do protocolo explicitamente. Pode começar por utilizar os seguintes parâmetros para o grupo (P tem 1024 bit):
P = 99494096650139337106186933977618513974146274831566768179581759037259788798151499814653951492724365471316253651463342255785311748602922458795201382445323499931625451272600173180136123245441204133515800495917242011863558721723303661523372572477211620144038809673692512025566673746993593384600667047373692203583
G = 44157404837960328768872680677686802650999163226766694797650810379076416463147265401084491113667624054557335394761604876882446924929840681990106974314935015501571333024773172440352475358750668213444607353872754650805031912866692119819377041901642732455911509867728218394542745330014071040326856846990119719675
No JCA, podemos gerar valores apropriados para os parâmetros necessários através de uma instância apropriada da classe AlgorithmParameterGenerator.
Em vez de trabalharmos directamente com a classe BigInteger, pode-se fazer uso da classe KeyAgreement.
No JCE Reference Guide está disponível um exemplo de codificação do protocolo.
Aula 6 - Continuação da codificação do protocolo Diffie-Hellman
Nesta aula pretende-se concluir o protocolo de acordo de chaves Diffie-Hellman. Sugere-se que agora façam exclusivamente uso das funcionalidades oferecidas pela JCA, nomeadamente:
Classe AlgorithmParameterGenerator para gerar os parâmetros P e G do algoritmo;
Classe KeyPairGenerator para gerar os pares de chaves ( (x, g^x) e (y,_g^y_) para cada um dos intervenientes);
Classe KeyAgreement que implementa o protocolo propriamente dito.
Aula 8 - Codificação do protocolo Station-to-Station.
Pretende-se complementar o programa com o acordo de chaves Diffie-Hellman para incluir a funcionalidade do protocolo Station to Station. Recorde que nesse protocolo é adicionado uma troca de assinaturas (cifrada com a chave de sessão negociada), i.e.:
Alice -> Bob : g^x
Alice <- Bob : g^y, EK(SB(g^y, g^x))
Alice -> Bob : EK(SA(g^x, g^y))
Um requisito adicional neste protocolo é a manipulação de pares de chaves de cifras assimétricas (e.g. RSA). Para tal deve produzir um pequeno programa que gere os pares de chaves para cada um dos intervenientes e os guarde em ficheiros que serão lidos pela aplicação Cliente/Servidor.
Novas Classes:
Pretende-se certificar as chaves públicas utilizadas no protocolo Station-to-Station com base em certificados X509. Para tal, disponibiliza-se:
Certificado de chave pública do Servidor: servidor.crt
Chave privada do Servidor (codificada em PKCS8): servidor.pk8
Certificado de chave pública do Cliente: cliente.crt
Chave privada do Cliente (codificada em PKCS8): cliente.pk8
Certificado auto-assinado da autoridade de certificação: ca.crt
A utilização de certificados pressupõe a sua validação. O Java disponibiliza uma API específica que deverá utilizar para o efeito (documentação abaixo). Para facilitar esse estudo recomenda-se o estudo/adaptação de um programa de exemplo que verifica a validade de uma cadeia de certificação: ValidateCertPath.java. Utilizando esse programa, podemos verificar a validade do certificado do servidor através da linha de comando:
java TWiki.ValidateCertPath ca.crt servidor.crt
Uma segunda questão que surgirá neste trabalho é a manipulação dos formatos das chaves: as chaves privadas correspondentes aos certificados fornecidos estão codificadas num formato standard PKCS8. Para se converter esse formato num objecto Java apropriado terá de se utilizar uma instância da classe KeyFactory. O fragmento de código que se apresenta ilustra esse processo:
byte[] encodedKey; // read from file
TWiki.PKCS8EncodedKeySpec keySpec = new TWiki.PKCS8EncodedKeySpec(encodedKey);
TWiki.KeyFactory keyFactory = TWiki.KeyFactory.getInstance("RSA");
TWiki.RSAPrivateKey privKey =
(TWiki.RSAPrivateKey)keyFactory.generatePrivate(keySpec);
Nesta sessão iremos fazer uso do openssl para construir uma pequena autoridade de certificação.
O processo de emissão de certificados X509 passa pelos seguintes passos:
- O utilizador gera um par de chaves;
- O utilizador produz um "pedido de certificado" que contém a sua identificação e a sua chave pública, que é assinado com a sua chave privada (o que certifica que quem solicita o certificado está na posse da respectiva chave privada);
- A autoridade de certificação valida os dados contidos no certificado e, no caso de certificar positivamente esses dados, emite o certificado de chave pública correspondente.
- O certificado é enviado ao utilizador e, eventualmente, publicado por outros meios (e.g. serviço de directoria).
Para cada um destes passos iremos fazer uso dos comandos respectivos do openssl.
Geração de chaves:
openssl genrsa -out grupoXPTO.key
Para utilizar a chave privada no Java é conveniente converter o seu formato para PKCS8
openssl pkcs8 -topk8 -nocrypt -in grupoXPTO.key -outform der -out grupoXptoPrivKey.der
Emissão do certificado: A emissão de certificados é normalmente realizada com o auxílio de scripts que invocam o comando openssl com os argumentos apropriados. Existem duas scripts normalmente utilizadas para este efeito:
CA.pl - distribuída com o "openssl".
sign.sh - distribuída com o "mod_ssl". Espera encontrar ficheiros ca.key e ca.crt.
Produção de PKCS12: Para certas utilizações (e.g. browsers, leitores de email, etc.) é conveniente encapsularmos o certificado e respectiva chave privada num PKCS12.
Conceitos Fundamentais: criptografia e criptoanálise; cifras, chaves e comunicação segura; cifras simétricas; distribuição e acordo de chaves; cifras assimétricas e criptografia de chave pública; assinaturas digitais e códigos de autenticação de mensagens; identificação.
Certificação e Infraestrutura de Chave Pública (PKI): certificados e CRLs; autoridades de registo; autoridades de certificação; cadeias e hierarquias de certificação; standards de criptografia de chave pública.
Aplicações e Protocolos Criptográficos: protocolos de sessão (SSL, SSH); segurança em correio electrónico (PGP, S/MIME); bases de dados seguras.
Bibliografia
Apontamentos da disciplina
Applied Cryptography: Protocols, Algorithms and Source Code in C, Bruce Schneier. John Wiley & Sons, 1995.
Cryptography: Theory and Practice, Douglas R. Stinson. CRC Press, 1995.
Descrevem-se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais do trabalho deverão ser desenvolvidas em Java, fazendo uso da framework JCA/JCE.
Os grupos são incentivados a fazerem uso dos programas de exemplo que tem vindo a ser desenvolvidos nas aulas teórico-práticas da disciplina. A data limite para a entrega do trabalho é 5 de Janeiro de 2009, devendo este ser enviado por email para o docente da disciplina, acompanhado por um relatório que documente as opções tomadas ao longo do seu desenvolvimento. A defesa do trabalho terá lugar no dia 9 de Janeiro de 2009, durante o horário lectivo da disciplina (10:00 - 13:00).
Projecto 1
O objectivo deste trabalho consiste em desenvolver uma aplicação de conversação (chat) segura.
O cenário considerado é uma organização contendo um conjunto bem definido de utilizadores (e.g. departamento de uma
empresa). Em termos da arquitectura do sistema, consideram-se as seguintes componentes:
Servidor: aplicação Java responsável por disponibilizar o serviço de chat;
Cliente: aplicação Java que possibilita o acesso dos utilizadores ao sistema;
CA: autoridade de certificação responsável pela emição dos certificados requeridos para o funcionamento das aplicações.
Em termos de funcionalidade, sugere-se:
A identidade dos utilizadores deverá ser assegurada por intermédio da utilização de certificados X509. A emissão dos certificados necessários é parte integrante do projecto. No entanto, não se impõe que essa componente seja realizada por uma aplicação Java desenvolvida especificamente para esse fim — pode-se fazer uso de ferramentas de domínio público como o openssl.
Um utilizador acede ao sistema através da aplicação cliente. Após apresentar as credenciais requeridas, terá acesso à “sala de conversação” onde poderá comunicar de forma segura com os utilizadores que se encontrem on-line.
(opcional) Construção de uma interface gráfica simples para os clientes.
(opcional) Um utilizador ligado ao sistema pode ainda solicitar uma conversação privada com um outro utilizador também disponível on-line. Nesse caso, e se o parceiro aceitar a comunicação, é estabelecida uma ligação segura entre eles.
(opcional) Deverá ser ainda possível a um utilizador enviar mensagens para serem lidas off-line por outros utilizadores. O servidor deverá assim gerir “caixas de correio” onde armazena as mensagens até que os destinatários se liguem ao sistema.
Em todas a comunicações estabelecidas deverão ser adoptados os requisitos de segurança sempre na perspectiva mais conservadora (e.g. um utilizador legítimo, se não estiver on-line, não deverá ser capaz de interceptar o conteúdo das mensagens trocadas na sala de conversação). A identificação clara dos requisitos de segurançaa, assim como escolhas fundamentada das técnicas criptográficas utilizadas, será dos aspectos mais valorizados na avaliação do trabalho.
Projecto 2
O objectivo deste projecto consiste em complementar o projecto desenvolvido no âmbito da disciplina de Sistemas Distribuídos para incorporar aspectos de segurança nos canais de comunicação envolvidos e no acesso aos recursos. Em particular, pretende-se
Utilizar o protocolo SSL em modo de autenticação mútua para os canais de comunicação:
Cliente(s) ↔ Servidor
Servidor ↔ motor de base de dados
A autenticação das várias entidades envolvidas deverá fazer uso de certificados X509. A emissão dos certificados necessários é parte integrante do projecto. No entanto, não se impõe que essa componente seja realizada por uma aplicação Java desenvolvida especificamente para esse fim — pode-se fazer uso de ferramentas de domínio público como o openssl.
(opcional) Construção de uma interface gráfica simples baseada em applets.
(opcional) Configuração de um servidor Web (onde se disponibiliza a applet) cujo controlo de acessos é regulado pelos mesmos certificados da aplicação.
(opcional) Avaliar como é que o(s) mecanismo(s) de autenticação do motor de base de dados se podem associar à autenticação com certificados X509 utilizados na comunicação X509.
Em todas a comunicações estabelecidas deverão ser adoptados os requisitos de segurança sempre na perspectiva mais conservadora. A identificação clara dos requisitos de segurançaa, assim como escolhas fundamentada das técnicas criptográficas utilizadas, será dos aspectos mais valorizados na avaliação do trabalho.
Sumário: Assinaturas digitais, identificação de agentes, protocolos de conhecimento zero, mecanismo desafio-resposta. -- ManuelBernardoBarbosa - 20 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Segurança teórica de cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 06 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 30 Mar 2006.
Sumário: Implementação de CBC a partir de ECB sobre openssl. Segurança teórica de cifras simétricas. -- ManuelBernardoBarbosa - 23 Mar 2006
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB -- ManuelBernardoBarbosa - 16 Mar 2006.
Sumário: Implementação em C de cifragem RC4. Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 9 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 2 Mar 2006.
Para consultar o exame da época especial, contactar o docente da disciplina. -- -- ManuelBernardoBarbosa - 20 Set 2007
Os exames de recurso poderão ser cunsultados na 5a feira dia 26 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 25 Jul 2007
O exame oral realizar-se-á na 2a feira, dia 9 de Julho, às 15:00, no Departamento de Informática em Gualtar/Braga. O aluno em questão deverá contactar o docente por e-mail, no caso da existência de algum impedimento à realização do exame oral nesta data. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da 2a chamada poderão ser consultados na 2a feira dia 9 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da primeira chamada poderão ser consultados na aula de dúvidas de 5a feira. -- ManuelBernardoBarbosa - 27 Jun 2007
Haverá uma aula de dúvidas de Criptografia, antes do exame da 2a chamada. Terá lugar na 5a feira, dia 28 de Junho, às 16:00, na sala de aula onde decorreram as aulas da disciplina. -- ManuelBernardoBarbosa - 26 Jun 2007
Os seguintes criptogramas foram gerados com RC4, AES em modo ECB, e AES em modo CBC. Em todos os casos foram utilizadas chaves/blocos de 128 bits. A chave utilizada foi 0x000102030405060708090a0b0c0d0e0f.
14 Out As notas do exame de recurso já saíram.
25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram. Teria que se realizar até ao final desta semana.
15 Mar A aula da próxima Sexta, 18 de Março, será substituida por uma palestra do Dr. António Lázaro sobre os primórdios da criptografia em Portugal. Apareçam às 14:00 no DI-A1.
Sumário: Digital Signature Algorithm. Protocolos de Identificação: conhecimento zero, desafio-resposta. -- ManuelBernardoBarbosa - 28 Apr 2006
Sumário: RSA OAEP. Assinaturas digitais. Protocolo Station to Station. -- ManuelBernardoBarbosa - 21 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 08 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 31 Mar 2006.
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB. -- ManuelBernardoBarbosa - 25 Mar 2006.
Sumário: Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 18 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 11 Mar 2006.
Exames de Education.Criptografia Aplicada exemplificativos do tipo de pergunta que poderá ser feita relativamente a certificação e aplicações. ( exemplo 1, exemplo 2 )
Bibliografia
Applied Cryptography: Protocols, Algorithms and Source Code in C,
Bruce Schneier
John Wiley & Sons, 1995.
Cryptography: Theory and Practice,
Douglas R. Stinson
CRC Press, 1995.
A Course in Number Theory and Cryptography,
Neal Koblitz
Springer-Verlag, 1994. (2nd edition)
-- ManuelBernardoBarbosa - 23 Apr 2004
14 Out As notas do exame de recurso já saíram.
25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram. Teria que se realizar até ao final desta semana.
15 Mar A aula da próxima Sexta, 18 de Março, será substituida por uma palestra do Dr. António Lázaro sobre os primórdios da criptografia em Portugal. Apareçam às 14:00 no DI-A1.
Education.Criptografia (MICEI)
Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA)
Sumário: Digital Signature Algorithm. Protocolos de Identificação: conhecimento zero, desafio-resposta. -- ManuelBernardoBarbosa - 28 Apr 2006
Sumário: RSA OAEP. Assinaturas digitais. Protocolo Station to Station. -- ManuelBernardoBarbosa - 21 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 08 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 31 Mar 2006.
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB. -- ManuelBernardoBarbosa - 25 Mar 2006.
Sumário: Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 18 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 11 Mar 2006.
Cifras simétricas, distribuição e acordo de chaves
Cifras assimétricas e Criptografia de Chave Pública
Assinaturas digitais e Message Authentication Codes
Identificação
Certificação e Public Key Infrastructure (PKI)
Certificados e CRLs
Autoridades de Registo
Autoridades de Certificação
Cadeias e Hierarquias de Certificação
Public Key Cryptography Standards (PKCS)
Aplicações e Protocolos Criptográficos Comerciais
Pretty Good Privacy (PGP)
Secure Sockets Layer (SSL)
IPsec
Kerberos
SSH
Horário das Aulas
MICEI/MSDPA: Sexta das 14:00 às 16:00 (DI A2)
Critérios de Avaliação
Exame Teórico (50%) + Trabalho Prático (50%)
Bibliografia
Applied Cryptography: Protocols, Algorithms and Source Code in C, Bruce Schneier. John Wiley & Sons, 1995.
Cryptography: Theory and Practice, Douglas R. Stinson. CRC Press, 1995.
A Course in Number Theory and Cryptography, Neal Koblitz. Springer-Verlag, 1994. (2nd edition)
Material Disponibilizado
Slides das Aulas:
Introdução - Conceitos introdutórios (corresponde à matéria da aula de apresentação).
Cifras Clássicas (slides que não foram apresentados durante o curso) - Apresenta as cifras utilizadas na antiguidade, assim como estratégias e técnicas de cripto-análise.
Fundamentos Teóricos (só foi apresentada a última parte, referente aos aspectos de complexidade computacional) - Apresenta-se a formalização da noção de "segurança" em sistemas criptográficos.
(No caso do trabalho prático não ser realizado, a nota final será limitada a 12 valores)
Avaliação prática
A componente prática da nota resulta da avalição de um trabalho prático cujo enunciado está disponível aqui.
O trabalho será realizado extra-aulas, individualmente.
Será necessário efectuar uma apresentação do trabalho efectuado, e entregar uma listagem comentada do código desenvolvido.
Para aqueles alunos que gostariam de realizar um Trabalho Prático com outras características, aqui estão algumas ideias (Projectos.pdf). Para mais informação contactar ManuelBernardoBarbosa.
Objectivos
Este curso pretende divulgar as técnicas criptográficas base que são mais relevantes à segurança dos sistemas de informação, em geral, e das comunicações electrónicas em particular.
Em alternativa à tradicional criptografia militar e diplomática, a ênfase do curso vai ser na chamada criptografia civil que tem como área de aplicação privilegiada o sector financeiro mas que se tem vindo a estender à globalidade dos sistemas de informação.
A divulgação e disponibilização de meios computacionais eficientes e baratos veio tornar obsoletas muitas das técnicas criptográficas tradicionais cuja segurança dependia, essencialmente, do seu desconhecimento público.
Ao invés, neste curso estudaremos uma nova geração de técnicas criptográficas que as vieram substituir as tradicionais e que, ao contrário destas, são técnicas abertas. Isto significa que os algoritmos e as metodologias de gestão de informação a eles associadas são publicamente conhecidos. Também significa que a sua segurança deve ser mais exigente porque tem de sobreviver ao escrutínio público.
Todas as técnicas criptográficas procuram resolver um ou mais dos problemas clássicos da comunicação segura:
Confidencialidade - É o problema que estuda o controlo do conhecimento da informação. Neste curso estudaremos cifras que constituem a técnica mais usual de garantir a confidencialidade da informação. Veremos várias classes de cifras adaptadas a requisitos distintos.
Autenticidade - Em termos de criptografia civil este é, talvez, o problema essencial. Estuda-se as circunstâncias em que items de informação (documentos electrónicos, ordens de pagamento, registos numa base de dados, etc.) são autênticos no sentido em que existem garantias de integridade e têm perfeitamente identificados os seus titulares. As assinaturas digitais são as técnicas base, estudadas neste curso, para lidar com este problema.
Identificação - Estudas as relações de entidades (pessoas, organizações e sistemas de informação) entre si. O reconhecimento da identidade de um utilizador num sistema operativo é, talvez, a versão mais conhecida deste problema. No entanto hoje em dia, com a crescente divulgação dos serviços mais variados através de meios electrónicos, a identificação de utilizadores legítimos desses serviços é um problema extremamente premente. As técnicas de identificação podem ter várias naturezas: podem ser baseadas em cifras ou em assinaturas digitais mas podem também ser baseadas em funções de hash.
É importante frisar que as técnicas criptográficas estudadas neste curso são o cerne das metodologias criptográficas usadas em aplicações concretas mas não definem completamente essas metodologias. Fica de fora deste curso toda a componente de protocolos criptográficos que será objecto de uma disciplina subsequente.
Programa Resumido
Terminologia
Canais seguros de informação.
Os objectivos e os problemas da Education.Criptografia.
Noção de cifra simétrica.
Noção de criptografia de chave públicas: cifras, assinaturas e protocolos.
Cifras Simétricas
Estudo das cifras orientadas à eficiência computacional.
Cifras sequenciais para processamento de informação em tempo real.
Cifras por blocos; seus modos e standards: DES e AES.
Introdução à criptoanálise linear e diferencial.
Teoria dos Números
Técnicas de teoria dos números em criptografia.
Divisibilidade.
Função de Euler-Phi.
Teoremas de Fermat e Chinês dos Restos.Factorização.
Grupos Cíclicos e o logaritmo discreto.
Números primos e factorização.
Education.Criptografia de Chave Pública baseada na Factorização de Inteiros
As técnicas RSA e Rabin. Cifras, assinaturas e protocolos.
Assinaturas com recuperação de mensagem.
Education.Criptografia de Chave Pública baseada no PLD
Segurança e o PLD (Problema do Logaritmo Discreto).
O protocolo de Diffie-Hellman. Técnicas El Gamal (cifra e assinatura).
Esquema de assinaturas DSA.
Education.Criptografia de Chave Pública: Protocolos
Protocolos de acordo e pré-distribuição de chaves.
Protocolos de identificação.
Certificados.
Education.Criptografia de Chave Pública baseada em Curvas Elípticas
O standard IEEE P1363.
Técnicas criptográficas baseadas no PLDCE:
cifras (El Gamal e ECES)
assinaturas (Nyberg-Rueppel e ECDSA)
protocolos (MQV e MO).
Bibliografia
Apontamentos Teóricos, José Valença, Departamento de Informática, Universidade do Minho.
Applied Cryptography: Protocols, Algorithms and Source Code in C,
Bruce Schneier
John Wiley & Sons, 1995.
Cryptography: Theory and Practice,
Douglas R. Stinson
CRC Press, 1995.
A Course in Number Theory and Cryptography,
Neal Koblitz
Springer-Verlag, 1994. (2nd edition)
-- ManuelBernardoBarbosa - 25 Fev 2004
27 Jul Já sairam as notas da época de recurso.
15 Jul Já sairam as notas da época normal.
1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem a entrega por email.
31 Mar Foi publicado o enunciado do segundo trabalho prático.
15 Mar Na próxima Sexta, 18 de Março, decorrerá no DI-A1 às 14:00 uma palestra sobre os primórdios da criptografia em Portugal. Apareçam!
14 Mar Já existem ideias para projectos alternativos. Vejam aqui.
9 Mar Foi publicado o enunciado do primeiro trabalho prático.
16 Fev A apresentação desta opção será no dia 21 Fev às 15h10 no DI-A2.
Elementos/Fundamentos de Education.Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2004-2005
Este curso pretende divulgar as técnicas criptográficas base que são mais relevantes à segurança dos sistemas de informação, em geral, e das comunicações electrónicas em particular.
Em alternativa à tradicional criptografia militar e diplomática, a ênfase do curso vai ser na chamada criptografia civil que tem como área de aplicação privilegiada o sector financeiro mas que se tem vindo a estender à globalidade dos sistemas de informação.
A divulgação e disponibilização de meios computacionais eficientes e baratos veio tornar obsoletas muitas das técnicas criptográficas tradicionais cuja segurança dependia, essencialmente, do seu desconhecimento público.
Ao invés, neste curso estudaremos uma nova geração de técnicas criptográficas que as vieram substituir as tradicionais e que, ao contrário destas, são técnicas abertas. Isto significa que os algoritmos e as metodologias de gestão de informação a eles associadas são publicamente conhecidos. Também significa que a sua segurança deve ser mais exigente porque tem de sobreviver ao escrutínio público.
Todas as técnicas criptográficas procuram resolver um ou mais dos problemas clássicos da comunicação segura:
Confidencialidade - É o problema que estuda o controlo do conhecimento da informação. Neste curso estudaremos cifras que constituem a técnica mais usual de garantir a confidencialidade da informação. Veremos várias classes de cifras adaptadas a requisitos distintos.
Autenticidade - Em termos de criptografia civil este é, talvez, o problema essencial. Estuda-se as circunstâncias em que items de informação (documentos electrónicos, ordens de pagamento, registos numa base de dados, etc.) são autênticos no sentido em que existem garantias de integridade e têm perfeitamente identificados os seus titulares. As assinaturas digitais são as técnicas base, estudadas neste curso, para lidar com este problema.
Identificação - Estudas as relações de entidades (pessoas, organizações e sistemas de informação) entre si. O reconhecimento da identidade de um utilizador num sistema operativo é, talvez, a versão mais conhecida deste problema. No entanto hoje em dia, com a crescente divulgação dos serviços mais variados através de meios electrónicos, a identificação de utilizadores legítimos desses serviços é um problema extremamente premente. As técnicas de identificação podem ter várias naturezas: podem ser baseadas em cifras ou em assinaturas digitais mas podem também ser baseadas em funções de hash.
É importante frisar que as técnicas criptográficas estudadas neste curso são o cerne das metodologias criptográficas usadas em aplicações concretas mas não definem completamente essas metodologias. Fica de fora deste curso toda a componente de protocolos criptográficos que será objecto de uma disciplina subsequente.
Programa Resumido
Terminologia
Canais seguros de informação.
Os objectivos e os problemas da Education.Criptografia.
Noção de cifra simétrica.
Noção de criptografia de chave públicas: cifras, assinaturas e protocolos.
Cifras Simétricas
Estudo das cifras orientadas à eficiência computacional.
Cifras sequenciais para processamento de informação em tempo real.
Cifras por blocos; seus modos e standards: DES e AES.
Introdução à criptoanálise linear e diferencial.
Teoria dos Números
Técnicas de teoria dos números em criptografia.
Divisibilidade.
Função de Euler-Phi.
Teoremas de Fermat e Chinês dos Restos.Factorização.
Grupos Cíclicos e o logaritmo discreto.
Números primos e factorização.
Education.Criptografia de Chave Pública baseada na Factorização de Inteiros
As técnicas RSA e Rabin. Cifras, assinaturas e protocolos.
Assinaturas com recuperação de mensagem.
Education.Criptografia de Chave Pública baseada no PLD
Segurança e o PLD (Problema do Logaritmo Discreto).
O protocolo de Diffie-Hellman. Técnicas El Gamal (cifra e assinatura).
Esquema de assinaturas DSA.
Education.Criptografia de Chave Pública: Protocolos
Protocolos de acordo e pré-distribuição de chaves.
Protocolos de identificação.
Certificados.
Education.Criptografia de Chave Pública baseada em Curvas Elípticas
O standard IEEE P1363.
Técnicas criptográficas baseadas no PLDCE:
cifras (El Gamal e ECES)
assinaturas (Nyberg-Rueppel e ECDSA)
protocolos (MQV e MO).
Bibliografia
Apontamentos Teóricos, José Valença, Departamento de Informática, Universidade do Minho.
Projectos - a data limite para a entrega dos projectos (protocolo Multicert/UM) é 30 de Setembro de 2006.
-- JoseBacelarAlmeida - 11 Set 2006
Classificações - As classificações já foram actualizadas com as notas da época de recurso.
Encontram-se aqui.
-- JoseBacelarAlmeida - 29 Jul 2006
Classificações da época normal - Já estão disponíveis as classificações da época normal (1ª e 2ª chamadas).
Encontram-se aqui.
-- JoseBacelarAlmeida - 17 Jul 2006
Notas da componente prática - Já está disponível a avaliação da componente prática da disciplina (aqui).
-- JoseBacelarAlmeida - 5 Jul 2006
Apontamentos (versão final) - Já está disponível a versão final dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 2 Jun 2006
Data de entrega do 2º trabalho - A data de entrega do 2º trabalho foi alterada para 8/6/2006.
-- JoseBacelarAlmeida - 25 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 23 May 2006
Projectos - já estão disponíveis as propostas de projectos no âmbito do protocolo Multicert/UM.
-- JoseBacelarAlmeida - 18 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 May 2006
Aula sobre prova de segurança do ElGamal - A aula de 11/05/2006 será dada pelo prof. Manuel Barbosa, sobre a prova de segurança da cifra ElGamal.
-- JoseBacelarAlmeida - 11 May 2006
Palestra - O coordenador Socrates/Erasmus, aproveitando a visita da Professora Tatjana Weltzer (Univ. Maribor, Eslovénia), sugeriu que a aula prática de 04/05/2006 fosse dedicada à assistencia da palestra Data Reusability. Por esse motivo a aula terá lugar no anfiteatro DI-A2.
-- JoseBacelarAlmeida - 03 May 2006
Apontamentos - Foram disponibilizados (secção da bibliografia) os apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 Apr 2006
JOIN'06 - Dada a realização das JOIN, não haverá aula TP no dia 06/04/2006 (ou mais precisamente, a
aula será nas próprias jornadas).
-- JoseBacelarAlmeida - 04 Apr 2006
Elementos/Fundamentos de Education.Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2005-2006
Não há pré-requisitos para frequentar esta disciplina.
Critério de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática (Trabalho Prático): 30%
Avaliação prática
A componente prática da nota resulta da avalição de um conjunto de guiões e de pequenos trabalhos.
Opcionalmente, os alunos poderão ainda realizar um projecto individual (ver lista de propostas em ElementosCriptografiaProjs0506). Esse projecto consistirá numa monografia (eventualmente com uma componente de programação) sobre um tema relacionado com a disciplina, e combinado em conjunto com o docente. O peso deste projecto na avaliação da disciplina dependerá da dificuldade e abrangência do tema escolhido.
Este curso introduz as técnicas criptográficas base relevantes à segurança dos sistemas de informação. Coloca ênfase especial na fundamentação matemática dessas técnicas e deixa para uma disciplina subsequente a sua aplicação em sistemas de informação concretos.
Notas - saíram as notas da 1ª chamada
--PaulaCristinaValenca? - 27 Jul 2007
JOIN'07 - devido a estar a decorrer as join'07, não haverá aula dia 10/05.
--PaulaCristinaValenca? - 09 May 2007
Alteração da data de entrega de trabalho - a data limite para entrega do primeiro trabalho prático foi alterada para 7 de Maio 2007.
--PaulaCristinaValenca? - 24 Apr 2007
Aula cancelada - a aula de 19/04 não irá decorrer.
--PaulaCristinaValenca? - 18 Apr 2007
Trabalho Prático - o enunciado do primeiro trabalho prático está disponível aqui--PaulaCristinaValenca? - 15 Apr 2007
Mudança de sala - as aulas TP decorrerão a partir desta semana na sala 003
--PaulaCristinaValenca? - 13 Mar 2007
Apontamentos - actualização.
--PaulaCristinaValenca? - 12 Mar 2007
Apontamentos - a primeira parte dos apontamentos teóricos da disciplina está disponível na secção da bibliografia.
--PaulaCristinaValenca? - 05 Mar 2007
Elementos/Fundamentos de Criptografia
Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º Ano - 2º Semestre Ano lectivo 2006-2007
Não há pré-requisitos para frequentar esta disciplina.
Critério de Avaliação
Nota final
Componente Teórica (Exame): 70% (nota mínima de 8 valores)
Componente Prática (Trabalho Prático): 30%
Avaliação prática
A componente prática da nota resulta da avalição de um conjunto de guiões e de pequenos trabalhos.
Opcionalmente, os alunos poderão ainda realizar um projecto individual (ver lista de propostas em ElementosCriptografiaProjs0506). Esse projecto consistirá numa monografia (eventualmente com uma componente de programação) sobre um tema relacionado com a disciplina, e combinado em conjunto com o docente. O peso deste projecto na avaliação da disciplina dependerá da dificuldade e abrangência do tema escolhido.
Este curso introduz as técnicas criptográficas base relevantes à segurança dos sistemas de informação. Coloca ênfase especial na fundamentação matemática dessas técnicas e deixa para uma disciplina subsequente a sua aplicação em sistemas de informação concretos.
27 Jul Já sairam as notas da época de recurso.
15 Jul Já sairam as notas da época normal.
1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem a entrega por email.
31 Mar Foi publicado o enunciado do segundo trabalho prático.
15 Mar Na próxima Sexta, 18 de Março, decorrerá no DI-A1 às 14:00 uma palestra sobre os primórdios da criptografia em Portugal. Apareçam!
14 Mar Já existem ideias para projectos alternativos. Vejam aqui.
9 Mar Foi publicado o enunciado do primeiro trabalho prático.
16 Fev A apresentação desta opção será no dia 21 Fev às 15h10 no DI-A2.
Projectos - a data limite para a entrega dos projectos (protocolo Multicert/UM) é 30 de Setembro de 2006.
-- JoseBacelarAlmeida - 11 Set 2006
Classificações - As classificações já foram actualizadas com as notas da época de recurso.
Encontram-se aqui.
-- JoseBacelarAlmeida - 29 Jul 2006
Classificações da época normal - Já estão disponíveis as classificações da época normal (1ª e 2ª chamadas).
Encontram-se aqui.
-- JoseBacelarAlmeida - 17 Jul 2006
Notas da componente prática - Já está disponível a avaliação da componente prática da disciplina (aqui).
-- JoseBacelarAlmeida - 5 Jul 2006
Apontamentos (versão final) - Já está disponível a versão final dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 2 Jun 2006
Data de entrega do 2º trabalho - A data de entrega do 2º trabalho foi alterada para 8/6/2006.
-- JoseBacelarAlmeida - 25 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 23 May 2006
Projectos - já estão disponíveis as propostas de projectos no âmbito do protocolo Multicert/UM.
-- JoseBacelarAlmeida - 18 May 2006
Apontamentos - Nova versão dos apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 May 2006
Aula sobre prova de segurança do ElGamal - A aula de 11/05/2006 será dada pelo prof. Manuel Barbosa, sobre a prova de segurança da cifra ElGamal.
-- JoseBacelarAlmeida - 11 May 2006
Palestra - O coordenador Socrates/Erasmus, aproveitando a visita da Professora Tatjana Weltzer (Univ. Maribor, Eslovénia), sugeriu que a aula prática de 04/05/2006 fosse dedicada à assistencia da palestra Data Reusability. Por esse motivo a aula terá lugar no anfiteatro DI-A2.
-- JoseBacelarAlmeida - 03 May 2006
Apontamentos - Foram disponibilizados (secção da bibliografia) os apontamentos teóricos da disciplina.
-- JoseBacelarAlmeida - 11 Apr 2006
JOIN'06 - Dada a realização das JOIN, não haverá aula TP no dia 06/04/2006 (ou mais precisamente, a
aula será nas próprias jornadas).
-- JoseBacelarAlmeida - 04 Apr 2006
Notas - saíram as notas da 1ª chamada
--PaulaCristinaValenca? - 27 Jul 2007
JOIN'07 - devido a estar a decorrer as join'07, não haverá aula dia 10/05.
--PaulaCristinaValenca? - 09 May 2007
Alteração da data de entrega de trabalho - a data limite para entrega do primeiro trabalho prático foi alterada para 7 de Maio 2007.
--PaulaCristinaValenca? - 24 Apr 2007
Aula cancelada - a aula de 19/04 não irá decorrer.
--PaulaCristinaValenca? - 18 Apr 2007
Trabalho Prático - o enunciado do primeiro trabalho prático está disponível aqui--PaulaCristinaValenca? - 15 Apr 2007
Mudança de sala - as aulas TP decorrerão a partir desta semana na sala 003
--PaulaCristinaValenca? - 13 Mar 2007
Apontamentos - actualização.
--PaulaCristinaValenca? - 12 Mar 2007
Apontamentos - a primeira parte dos apontamentos teóricos da disciplina está disponível na secção da bibliografia.
--PaulaCristinaValenca? - 05 Mar 2007
Os projectos aqui propostos deverão ser apresentados sobre a forma de monografia. De uma forma genérica, consistem no aprofundamento de um determinado tema avançado da criptografia moderna, por intermédio de leitura de artigos de investigação e da consulta de bibliografia relevante. Não quer isto dizer que não tenha cabimento incluir a codificação de algoritmos e/ou técnicas - fragmentos de código poderão ser relevantes para ilustrar as várias técnicas ou conduzir pequenas experiências (e.g. scripts PARI/GP). A este respeito, o projecto das BDDs distingue-se dos restantes na medida em que, neste, a componente de codificação tem um peso notoriamente superior aos demais.
Utilização de BDDs para análise de funções booleanas
A utilização de BDDs (Binary Decision Diagrams) é um ingrediante fundamental na codificação eficiente de algoritmos de verificação de fórmulas lógica (e.g. algoritmo Davis Putnam). O objectivo deste trabalho é de explorar essas estruturas de dados na análise de funções booleanas utilizadas em operações criptográficas (por intermédio dos seus espectros, conforme foi apresentado nas aulas teóricas de EC).
Trata-se de um trabalho essencialmente prático já que se pretende adaptar uma implementação existente de BDDs (em linguagem C ou C++) para as operações específicas da manipulação de espectos de funções booleanas.
*material de referência:
Tradicionalmente, a verificação eficiente da primalidade de números era obtida por intermédio de testes probabilísticos --- existia portanto uma (pequena) probabilidade de o algoritmo identificar um "falso primo". Recentemente (2002) surgiram os primeiros testes de primalidade determinísticos de complexidade polinomial.
O objectivo deste trabalho é elaborar um estudo em torno da verificação da primalidade, com especial ênfase na apresentação dos algoritmos determinísticos.
Material de Referência:
A criptoanálise algébrica reclama produzir ataques sobre cifras simétricas até agora tidas como seguras como Serpent ou mesmo o AES (mas a níveis que não comprometem a segurança actual da cifra). Trata-se de um assunto ainda envolto em certa polémica porque a concretização desses ataques passa por procedimentos heurísticos cuja viabilidade em sistemas reais é discutível.
Material de referência:
artigo da Wikipedia (bem mais moderado e equilibrado do que o site anterior)
Técnicas criptográficas baseadas em identidade
Nas técnicas criptográficas baseadas em identidade (identity based cryptography) a chave pública dos intervenientes é obtida directamente da sua identidade. Estas técnicas são um domínio preveligiado da aplicação de pairings (emparelhamento) construídas sobre grupos cíclicos.
O objectivo deste trabalho é o de se realizar um estudo dos fundamentos teóricos dos emparelhamentos e da sua aplicação em técnicas criptográficas baseadas em identidade.
Material de referência:
A segurança de técnicas e protocolos criptográficos demonstra-se por redução desses sistemas a operações tidas como computacionalmente intratáveis. No modelo Random Oracle, essa redução é realizada sob a assunção que as funções de sentido único exibem um comportamento indestiguível do aleatório e portanto podem ser simuladas por intermédio de invocações a um "oráculo" apropriado.
Material de referência:
As funções de hash são um ingrediante fundamental em muitos técnicas criptográficas. Recentemente, foram anunciados alguns ataques a funções de Hash tidas como seguras como o MD5 ou variantes do SHA. O objectivo deste trabalho consiste em estudar os requisitos de segurança impostos sobre as funções de Hash criptográficas, quais os ataques associados, e quais as implicações desses requisitos na segurança de técnicas criptográficas (e.g. assinatura digital). Pretende-se também realizar um levantamento do estado de arte actual dos ataques às funções de Hash usuais e das estratégias para os encontrar.
Material de referência:
Efectue a criptoanálise destes quatro criptogramas que foram obtidos recorrendo a cifras de substituição, Affine e Vigenere. Deve que determinar que cifra foi utilizada em cada um dos casos. Apresente todo o trabalho que desenvolver, incluindo o código, e explique como chegou a uma solução. Não é suficiente apresentar o texto limpo.
Os textos limpos são em Português, e não contêm acentuação de nenhum tipo, espaços ou pontuação. Os valores típicos da análise de frequência aplicáveis em Inglês não são aplicáveis neste caso: terão de ser calculados propositadamente para este efeito. Quanto melhor for a qualidade dos valores que obtiver, maiores serão as hipóteses de que os seus palpites estejam correctos.
Recupere o texto limpo correspondente a cada um dos seguintes criptogramas obtidos com a cifra RSA. Os textos limpos são em Português, e não contêm acentuação de nenhum tipo, espaços ou pontuação. Note que para módulos pequenos o problema da factorização do módulo é relativamente fácil de resolver. O texto limpo foi dividido em blocos de i letras: cada bloco Li ... L1 L0 é codificado no inteiro Li*(26^i) + ... + L1*26 + L0. No último bloco é sempre inserido padding, correspondendo cada letra inserida ao tamanho do padding. Escreva e use os seus próprios programas para fazer a criptoanálise. Submeta listagens comentadas das partes relevantes do código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Gere uma chave RSA que permita cifrar blocos de 20 letras, como por exemplo a seguinte:
n = 1174131352704207214349241420991791462495108045279851173277
a = 935796131047316636883975835187745394794578628568303251791
b = 401138724311605979942538127567746219521486438387303984111
Já agora, como extra poderá tentar factorizar este módulo.
Trabalho Prático 3 (5 Maio)
Seja E a curva elíptica y^2 = x^3 + x + 13 definida sobre Z149.
Determine o número de pontos em E.
Determine se E é ou não um grupo cíclico. Em caso afirmativo encontre um gerador desse grupo. Senão, encontre um elemento com ordem máxima.
Decifre o seguinte criptograma determinado com a cifra de Menezes-Vanstone descrito na secção 5.2.2 do livro Cryptography: Theory and Practice. O expoente secreto é a = 100. Cada elemento do texto em claro representa dois caracteres, codificados como A<->1, B<->2, ..., Z<->26 (neste caso, 0 não é permitido no texto em claro).
Defina uma função que determine o inverso multiplicativo de x\in Zn (note que pode não existir).
Defina uma função que determine o grupo multiplicativo Zn*.
Modifique a função anterior para que, a cada elemento de x\in Zn*, associe o sub-grupo cíclico gerado por x.
09/03/2006 - Aritmética Modular e RSA
As seguintes funções do PARI/GP vão ser uteis nesta sessão: eulerphi, gcd, bezout, chinese, prime, isprime, ispseudoprime, random. Recomenda-se portanto uma leitura rápida da documentação disponibilizada pelo GP (e.g. ?eulerphi, ou para mais detalhe ??eulerphi).
Utilize a função bezout para calcular o inverso multiplicativo de x\in Zn.
O teorema chinês dos restos permite resolver um sistema de equações {x = ai [ni]} quando os valores ni são primos entre si dois a dois. Como poderá explorar esse resultado (e função respectiva do GP) para resolver o seguinte sistema de equações?
13 x = 4 [99]
15 x = 56 [101]
Codifique uma função que gere aleatóriamente um número primo (o número de dígitos é passado como argumento).
Pretende-se codificar o algoritmo RSA. Para tal deverá realizar três funções:
rsa_setup, que recebe como argumento o número de dígitos da chave e retorna como resultado o par de chaves.
rsa_enc, que recebe como argumento a chave pública e o texto limpo, e retorna o criptograma.
rsa_dec, que recebe como argumento a chave privada e o criptograma, e retorna o texto limpo.
16/03/2006 - Ataques ao RSA
Correcção do RSA (i.e. x=rsa_dec(rsa_enc(x,pubKey),privKey))
Alguns ataques ao RSA:
Factorização do módulo
Codebook
Módulo comum
Expoente baixo
Trabalho 1: Cifra RSA
Deverá desenvolver uma script PARI/GP que implemente o algoritmo RSA assim como os ataques estudados a essa cifra. Deve procurar tornar o seu código o mais eficiente possível e não esqueça de incluir comentários por forma a tornar inteligível a sua leitura. Inclua também exemplos que ilustrem as funcionalidades implementadas.
Os trabalhos deverão ser enviados por email até ao dia 30/3/2006.
Desafios:
Tente recuperar o texto limpo correspondente a cada um dos seguintes criptogramas obtidos com a cifra RSA. Os textos limpos são em Português. Note que para módulos pequenos o problema da factorização do módulo é relativamente fácil de resolver. O texto limpo foi dividido em blocos de i letras e codificado sob uma base b: cada bloco Li ... L1 L0 é codificado no inteiro Li*(b^i) + ... + L1*b + L0. Para valores de base b adoptam-se alternativamente o 26 (só se codificam as letras, omitindo-se do texto limpo espaços, dígitos e pontuação) ou 255 (código ascii).
No último bloco é sempre inserido padding, correspondendo cada letra inserida ao tamanho do padding. Escreva e use os seus próprios programas para fazer a criptoanálise. Submeta as scripts de código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Importante: note que certos números são apresentados em várias linhas.
Problema 1
i = 9; b = 255
e = 17
n = 1249041700673382695459846605609514730554186626237
C = 321180546341126455980279730178761953097183911234, 716950862594240028452266734363072497454521223524, 574948179391147816051505896812694387194959833965, 111532735643033423942855061239383848643971241832
Problema 2 - Uma mesma mensagem M foi cifrada para três destinatários distintos resultando em C1, C2 e C3. Os parâmetros utilizados foram:
n = 63914704110618263992945741621505287653261454154795997491424168943092481614551744951230978759060853906999263256464277377149313570557480462140376730466093139279042063802231438893958813649137968723832554178514469387083227792295356047773281856489868696857456780247422046270127054298844870602475384663637199209513
C = 350915208109496145856, 27661335465828884684696, 31802586529207976000000, 494171409093635852161856, 407524745047362736519656
Problema 4
i = 6; b = 26
e = 7
n = 63914704110618263992945741621505287653261454154795997491424168943092481614551744951230978759060853906999263256464277377149313570557480462140376730466093139279042063802231438893958813649137968723832554178514469387083227792295356047773281856489868696857456780247422046270127054298844870602475384663637199209513
C = 32043924526870920534079392028726370777600000000000000, 19306983940121876610266501070351375064373302782143184896, 868570571278402253220237877279110105219431120896, 74155878556235370096776829384639812609423519551832064
Problema 5
i = 2; b = 255
e = 65537
n = 17261200916952873367482144866494450909360697563046707445863443627091875871740773679233823099712178179358393710196331449844554301490846811351075814696529637192369851435155247912946391141781758246256188893928155117998023665625185156995891322212159388498447355096970990510996522873761394696658254094897711248116842246989910729668464151532042605269120184232048980862110396885191539147917938822921764164079034002842741264794291828765227570141138448500874109634833892704185454278081338756835822183447573030032642382069970175786340323583948629425256405818165398966715248409970692185032883713278510782005243891336381732676319
Pretende-se implementar algumas técnicas baseadas no problema do Logaritmo Discreto, nomeadamente o acordo de chaves Diffie-Hellman e a cifra El Gamal.
Codifique procedimentos que:
gere primos de Sophie Germain (i.e. q tal que 2*q+1 também é primo).
um gerador do grupo multiplicativo Zp* (em que p=2*q+1). Utilize o facto que g\in Zp* é um gerador se g^2!=1[p] e g^q!=1[p].
um gerador de um sub-grupo de Zp* de ordem q (onde p=2*q+1).
Implemente as seguintes técnicas (incluindo a geração dos parâmetros):
Acordo de chaves Diffie-Hellman,
Cifra ElGamal
23/03/2006 - (16:00-18:00 - substituição da aula de 30/03/2006)
Aula de acompanhamento ao primeiro trabalho prático.
06/04/2006 - (JOIN06)
JOIN'06
20/04/2006 - Corpos Finitos
Pretende-se implementar algumas funções de manipulação de Corpos Finitos em Pari/GP. Para tal far-se-á uso da habilidade desse sistema possibilitar a manipulação directa de polinómios.
Utilize o PARI/GP para:
Determinar se x^5-x é divisível por x^2+1 em GF(3)
Calcular a factorização de x^9-x
OBS: Note que funções bem conhecidas como gcd, factor admitem polinómios como argumentos. Existem também funções específicas para manipulação de polinómios como polisirreducible, factormod, polrootsmod, etc. -- consulte o help (?7).
Defina uma função que calcule todos os polinómios primitivos do corpo finito GF(m) (com m=p^n e p primo). Determine os polinómios promitivos de GF(9) e GF(81). [RELEMBRE: um polinómio f(X) diz-se primitivo em GF(p^n) se tiver grau n e se o menor inteiro k para o qual f(X) divide x^k-1 for p^n-1.]
Defina as operações do corpo finito com m=p^n elementos (p primo) visto como GF(p)[X]/<f(X)> onde f(X) é um polinómio primitivo de grau n com coeficientes em GF(p).
Implemente a cifra ElGamal sobre o corpo finito GF(2^n). (obs.: para n suficientemente grande, as funções realizadas na aula anterior para encontrar o polinómio primitivo não irá funcionar. Para tal deve consultar a tabela de polinómios primitivos disponibilizados em P1363-AnexoA).
Algumas funções úteis para converter inteiros em polinómios binários...
\\assume-se que o polinómio "p" está definido sobre a variável "x"!!!
poleval(y,p) =
{
local(x=y);
return (eval(p));
}
pol2int(p) = poleval(2,lift(lift(p)))
int2pol(v) =
{
local(dr,i,res,p);
dr=divrem(v,2)~;
res = 0;
p = 0;
dr = [v,0];
until(dr[1] == 0, dr=divrem(dr[1],2)~; res += Mod(dr[2],2)*x^p; p++);
return (res);
}
Trabalho 2: Cifra ElGamal e Acordo de Chaves Diffie Hellman
Deverá desenvolver uma script PARI/GP que implemente o acordo de chaves Diffie Hellman e a cifra ElGamal nos seguintes grupos:
Sub-grupo de ordem elevada de Zp.
No corpo finíto GF(2^n).
Numa curva elíptica sobre GF(p).
Deve procurar tornar o seu código o mais eficiente possível e não esqueça de incluir comentários por forma a tornar inteligível a sua leitura. Inclua também exemplos que ilustrem as funcionalidades implementadas.
Prazo de entrega:
Os trabalhos deverão ser enviados por email até ao dia 8/6/2006 (actualizado em 25/5/2006).
04/05/2006 - Palestra de Tatjana Weltzer
Palestra Data Reusability (DI-A2).
11/05/2006 - A segurança semântica de primitivas criptográficas
Aula sobre definição de segurança das primitivas criptográficas. Demonstração da segurança semântica do El Gamal (pelo prof. Manuel Barbosa).
18/05/2006 - Enterro da Gata
Tolerância de ponto: Enterro da Gata.
25/05/2006 - Curvas Elípticas sobre Corpos Finitos
Aula sobre os fundamentos de técnicas criptográficas baseadas em Curvas Elípticas. No sistema PARI-GP, faremos uso das funções dedicadas às curvas elípticas, em particular ellinit, ellisoncurve, elladd, ellpow.
Replique, em PARI-GP, os exemplos apresentados no tutorial de curvas elípticas sobre corpos finitos GF(p). Obs.: O Pari-GP não suporta apropriadamente curvas elípticas sobre corpos finitos binários GF(2^n). Por esse motivo vamos considerar unicamentre curvas elípticas sobre corpos da forma GF(p) (p primo).
Implemente o El Gamal e o DH em curvas elípticas sobre corpos GF(p). Para o efeito, pode utilizar os parâmetros gerados na página http://www.cryptomathic.com/labs/ellipticcurvedemo.html ou, ainda melhor, disponibilizados por um standard apropriado como http://www.secg.org/?action=secg,docs_secg. Obs.: A codificação directa do El Gamal em curvas elípticas pressupõe a codificação da mensagem em pontos da curva. Esta tarefa não é de todo imediata, motivo pelo qual não é normalmente utilizada essa técnica nessa forma em curvas elípticas (um segundo motivo prende-se com o facto de que essa técnica não ser segura face a ataques de criptograma escolhido). Uma forma de ultrapassar a operação de codificação da mensagem em pontos da curva é utilizar-se a versão Hashed El Gamal (c.f. aula de provas de segurança dada por prof. Manuel Barbosa).
Esta sessão é acompanhada de um documento PDF que apresenta uma versão mais detalhada da introdução que se segue.
Instalação
O PARI/GP é um sistema de algebra computacional particularmente indicado para computações na área de Teoria de Números e, consequentemente, para a resolução de pequenos problemas na área de Criptografia. Além das bibliotecas, contém um interpretador,
gp, e uma linguagem de script, gp-script.
A página oficial é http://pari.math.u-bordeaux.fr/.
Para instalar o programa da distribuição de source, faça:
Se usa o Emacs, a distribuição inclui modos de suporte para o PARI/GP. Consulte a documentação e o ficheiro pariemacs.txt para mais informação.
A distribuição inclui também documentação, em particular, um manual de utilizador, um tutorial e uma Reference Card. Esta última será de grande utilidade no futuro. Robert B. Ash escreveu também um tutorial do Pari/GP.
Tipos do PARI e comandos básicos
Para correr, chame num terminal o comando gp. Para terminar, escreva quit ou \q. Para ajuda numa função ou palavra ( e.g, foo ), ?foo ou ??foo. O último output pode ser chamado através de %, %n para a linha n. O carácter # acciona ou desacciona o temporizador. Finalmente, \r fich lê um ficheiro fich (mais tarde importaremos pequenos programas GP desta forma).
Há quinze tipos fundamentais no PARI, enumerados a seguir. Concentraremo-nos nos oito primeiros (no entanto, encontrará por certo referências aos outros tipos na literatura na área de Criptografia).
t_INT - Inteiros
t_REAL - Reais
t_FRAC - Racionais
t_INTMOD - Inteiros Modulares
t_COMPLEX - Complexos
t_POL - Polinómios
t_MAT - Matrizes
t_VEC/t_COL - Vectores
t_LIST - Listas
t_STR - Strings
t_QUAD - Corpos Quadráticos
t_PADIC - P-ádicos
t_POLMOD - Polinómios mod P(X)
t_SER - Séries de potências
t_RFRAC - Funções Racionais
Siga o documento PDF que acompanha esta aula. As notas seguintes são apenas um resumo dos passos a seguir.
Exemplo: Primalidade e Factorização
Defina p como o menor primo maior que 2100, q como o primo seguinte e n = p*q.
Accione o timer e corra trial division (isto é, divida por todos os números) até 20000
Como explica o resultado? E por que razão continuar a tentar dividir por todos os números até à raiz quadrada de n não é uma boa estratégia?
Use o teste do Pequeno Teorema de Fermat para a = 2 e confirme o resultado com o comando isprime (registe o tempo que este último levou)
Factorize n usando o comando factor e compare o tempo que este levou com o tempo do isprime
Como curiosidade, corra a seguinte sequência de instruções,
gp > { u = nextprime(sqrtint(n));
i = 1;
while(i < 100 && n%u, u = nextprime(u); i = i + 1);
u
}
gp > u == q
gp > q - p
gp > #
Do Algoritmo de Euclides à Aritmética Modular
No que se segue, crie e edite um ficheiro com extensão .gp e importe no GP através do comando \r fich.
A função factorial pode ser definida da seguinte forma,
\\ exemplo simples da definicao de uma funcao em GP
myFact(n) =
{ local(fact);
if( type(n) != "t_INT" || n < 0,
return(-1));
fact = 1;
while( n > 0,
fact = fact*n;
n = n - 1;
);
fact
}
Com base neste exemplo,
escreva uma função que calcule o maior divisor comum ( gcd ) de dois inteiros não negativos através do algoritmo de Euclides e estime a complexidade do algoritmo;
extenda a sua função de forma a calcular u e v, tal que un + vm = gcd(n,m) segundo a versão extendida do algoritmo de Euclides;
compare o resultado da sua função com o da função bezout, para m = 2101+1 e n = 2237+25+1;
verifique que o inverso de m mod n é v mod n, ainda no exemplo acima;
tente calcular o inverso de 5 mod n usando os dois métodos e explique o resultado
08/03/2007 - Computações
Pretende-se nesta sessão sensibilizar os alunos para a complexidade de um algoritmo, através da discussão de certos exemplos de algoritmos simples mas fundamentais. Consulte o PDF auxiliar para a descrição dos algoritmos.
Seja (G, *) um grupo multiplicativo. Pretende-se calcular de uma forma eficiente gn para um elemento g de G e um inteiro n.
Implemente o algoritmo de potenciação descrito no PDF auxiliar
Conte o número de multiplicações no pior caso e em média.
Diga a complexidade em tempo do algoritmo.
Na aula passada foi apresentado o teste de Fermat para teste da não primalidade de um número. O teste de Miller-Rabin não só elimina os casos de pseudo-primos do estilo dos números de Carmichael como requere menos tentativas feitas. É um algoritmo não determinístico que poderia ser tornado deterministico assumindo a hipótese generalizada de Riemann.
Implemente o teste de Miller-Rabin, descrito no PDF auxiliar (consulte a função random)
Explique a presença de c = 20 no algoritmo.
Dê uma estimativa para o tempo médio do algoritmo e discuta a probabilidade de o teste falhar-
Utilize o teste de Miller-Rabin para gerar um número (provavelmente) primo aleatório com n bits
Qual o pior caso?
Sabendo que a variável aleatória X que toma o valor do número de tentativas necessárias para ter um primeiro sucesso segue a distribuição discreta geométrica e que o número de primos até N tende para N/(log N) à medida que N tende para infinito, dê uma estimativa para a complexidade média deste método.
15/03/2007 - Continuação da aula anterior
Primeiro, um pequeno aquecimento,
Use a função bezout, para calcular o GCD (extendido) de m = 2101+1 e n = 2237+25+1; esta função calcula u e v, tal que un + vm = gcd(n,m).
Calcule seguidamente o inverso de m mod n e verifique que é v mod n
Tente calcular o inverso de 5 mod n usando os dois métodos e explique o resultado
Voltando para o tema da aula anterior, faça a segunda e terceira parte da aula: o teste de Miller-Rabin e uma função que gere um primo aleatório com n bits. Responda também às questões postas.
22/03/2007 - "Birthday attack", colisões e funções de Hash
Calcule quantas pessoas são necessárias numa sala para que a probabilidade de uma delas partilhar o seu aniversário seja superior a 50%.
Calcule quantas pessoas são necessárias para que a probabilidade que duas façam anos no mesmo dia seja superior a 50%.
Seja H(x) uma função de hash que dada uma mensagem de tamanho arbitrário, devolve uma string de tamanho fixo 160 bits. Supondo que qualquer string de 160 bits tem igual probabilidade de ocorrência e usando a aproximação e^(-a/n) = (1 - a/n), calcule o número de tentativas necessárias num ataque à força bruta para encontrar uma colisão com probabilidade superior a 0.5. Como referência um ataque de pré-imagem à força bruta numa função de hash n-bit deverá requerer aproximadamente 2n tentativas.
Construa uma função de hash da seguinte forma:
Escolha p e q primos aleatórios de 512 bits e defina uma funcao f(x) = x2 mod pq
Defina uma função que dada uma mensagem a parta em blocos de k bits.
Defina uma função que cicle sobre os blocos Sk+1 = (Sk + bk)2 mod pq, sendo S0 um valor aleatório (a seed) e bk o bloco k da mensagem.
Defina a função de hash como sendo uma função que retire 160 bits aleatórios dos 1024 bits do último Sk
29/03/2007 - Funções de Hash - continuação da aula anterior
Dado estar a decorrer a ETAPS, a aula desta semana foi mais curta e concentrou-se em terminar o estudo de funções de Hash da aula anterior.
12/04/2007 - RSA
Implementação das funções primitivas de geração de chaves, cifragem e decifragem do RSA. Verificação de correcção.
Referências:
Implemente as operações de adiçao e multiplicação sobre corpos finitos F2n, na representação Z2[X]/f(X)Z2[X], onde f(X) é um polinómio primitivo de grau n com coeficientes em Z2.
Implemente as primitivas de cifragem ElGamal? sobre F2n. Use as seguintes funções de conversão:
pol2int(p) = { local(x); x = 2; eval(lift(lift(p))) }
// c e' o polinomio caracteristico
int2pol(u, c) =
{
local(bin_exp, i, n, p);
bin_exp = binary(u);
n = length(bin_exp);
p = 0;
for(i = 1, i <= n, p += bin_exp[i]*x^(n-i));
return( Mod(p, c))
}
Implemente em PARI/GP a geração de chaves RSA assim como as primitivas de cifragem e decifragem RSA.
Implemente também dois esquemas RSA: um sem padding (ou padding a zero) e outro que use a codificação PKCS1.5 (note que, apesar de estar ainda presente no Standard, o seu uso é preterido em favor de esquemas do tipo OAEP).
A sua implementação deverá cobrir as duas possiveis representações de chave privada. Comente adequadamente, optimize o seu código e inclua exemplos de execução.
Como referência, consulte
Os trabalhos deverão ser enviados por email até ao dia 30/4/2007 7/5/2007 (Actualização)
Desafios:
Os seguintes desafios foram todos cifrados sem padding e demonstram algumas más práticas a evitar ou situações susceptíveis de ataque. A dificuldade dos desafios vai aumentando. Duas boas referências para ataques à cifra RSA:
Tente recuperar o texto limpo original correspondente a cada um dos criptogramas RSA apresentados. O texto limpo foi dividido em blocos de k/8 caracteres, onde k é o tamanho do módulo RSA usado e codificando cada caractér com base no seu código ASCII(consulte as funções Vecsmall e Strchr). Na implementação foram usadas as funções de conversão de dados OS2IP e I2OSP para converter as strings de octetos em inteiros para uso das primitivas RSA e vice-versa (ver documentação acima). Em particular, os criptogramas estão apresentados como blocos de strings de octetos (em hexadecimal). Note ainda que números grandes podem estar partidos em várias linhas.
Submeta as scripts de código que produzir, o texto limpo que recuperou e uma explicação de como procedeu para resolver o problema.
Problema 1
e = 5
N = 35875741929544272310671414455212431786075877142865793354192228749439203035201
N = 108903268357736455066815314680962453042814775006206492721678475969098339196867933859146494098327681608326859558107942644645772721578023786494435786218535101121749241579474189946833477645334025671200309042702672365522909567221414902258969417441836884119829449701459194027075720926766820866417694789983660054201
Problema 3 - Uma mesma mensagem M foi cifrada para três destinatários distintos com chaves públicas, respectivamente, (NA, e), (NB, e) e (NC, e).
e = 3
NA = 112210881912528832873488730897626192705473369219616538753081704551444228287799270549518183502360744345023340823731796310204518371544839019675852328331644980384851027727542434889929546615023950787072012130050158370679942353686548079806643019023318116196111524880623908853557168750513262508514183295567563396901
CA = 5d f0 ba 37 0c ed 20 7b ef 9c 80 f2 fa e3 b7 9891 44 ed 3f 34 5f a8 df 60 92 bb a1 c0 5b 2c ee4b db b8 8a 91 e3 f2 4e 77 1f 5a 9a e0 12 68 e13d d5 8a 8a 29 be 59 fc c6 e1 b5 ed ed 50 c6 1a28 75 76 59 c5 d9 0c 13 05 8e f2 77 09 5b 04 5690 2e bc d5 bc 40 84 d0 11 6e 32 d1 7b 80 78 dfca 9d 5c 53 26 ec 89 77 8f d0 25 c6 0b a4 4e feb6 19 10 15 17 67 58 fa 58 5d 3a 29 bb ad 80 7d
NB = 120392098486560881218868530337975928170828473709788575687002424422185252096337743704094351935139811404555600639609802793137996257833314068179655039692270490823980274420626465969667005417243382186000618918556258697621082514239398884970118558437792199690407736712811686600001659384083176017014815881112323115387
CB = 8b ba 35 a0 e2 39 4b 76 b4 36 56 bc 59 c7 6b 4245 a3 e2 86 55 a7 2b bb 6c 2f 03 62 4d 22 da aedc fc 07 07 82 c8 00 07 bc a4 ec a6 76 9d cf c62c 78 1d 1c 51 11 8a ea e9 11 6b 12 1c 55 33 7228 ca 49 ee 1c 8c d7 f2 33 57 e9 72 38 91 11 b0b9 35 6b 40 ce b3 5f fa 10 a8 29 1a 5e 3a a9 eef4 57 af 37 a5 d7 a3 61 ec 4a d4 b9 08 22 f4 7a41 bb 0e 7b d4 23 87 1c 79 0d da 49 ad 00 d5 7b
CC = 21 a3 3d bf e5 45 28 a2 a6 dd 2c cd be 3d fd 3c66 29 1c f5 1e 09 6d e6 0d fd 9f 24 47 39 f7 4814 e0 4d b6 0b f6 09 51 c9 d7 f3 d8 e5 04 ac 5872 d3 63 87 3c 78 f1 76 b9 95 69 63 3e 69 a5 44c0 a7 5e f7 1a 5c fe c8 81 10 19 04 74 d5 3b f497 0f 9e a0 23 e8 1b d4 6d 4d 3a 87 4c d6 5e 0b41 df fe cd 03 6d fb f3 df 4f 08 fe 7e e9 ef 6ea7 57 3b 73 ab cb d2 47 21 ef c2 17 e4 50 2c 77
Problema 4 - Uma entidade gerou dois pares de chaves (eA, dA), (eB, dB) com o mesmo módulo N. O criptograma C resultou de cifrar uma mensagem M com a chave pública(N, eA). O par (eB, dB) é-lhe conhecido.
eA = 7
eB = 65537
dB = 39416603088039895887964060371334748707670181869271319109960477347702105880619234458420932298926540265854465032835901877079191136362559604774232491527176499431785446660397131847396979242313155809991190995078195729830849959370439753585648748394681408327383892352649528455574857326003405818818014111476249182273
N = 93190689631344540288943023973887641632560631643810766252145736072740004080019580400488190478887037135761330261795328330380192983542318499931056089365677012269003911821768807536897426827550265402624038513510004795691089654752469031026657789356395540174230174770649063948079509069830480072323583374601495530559
C = 80 f8 31 9a 3c 3c 59 e3 a3 50 58 15 18 72 d2 d69a ce 3e d9 8e a0 69 55 55 dc 7e 65 63 ce 3d f1a2 c2 d1 79 dd 71 e0 a8 dc b9 8d 85 61 63 fb c6fb 86 e0 a2 4d 53 6b c5 29 8d c8 a6 82 12 4c a2a2 7c 0f db ee 1a cb 0b 82 5e 66 ec dc 8d e1 acf9 d0 5b 9f 6a 35 85 f7 99 1a 63 39 9c 10 2d c772 1b 22 ca 55 e4 a9 51 77 04 4f dd bd b0 a9 9c59 8b a6 77 21 d8 e4 01 ef 87 60 45 48 1a 4b f1
Problema 5
e = 27812569046454244824320816342425551314965950198963961226616524831852818707612280200369494571182920614986907740197159710639233959936262113097762464847197158410910541780972991512038058297628122165933139343626891495473809004783722872564491919727681115482747001462621144735141539925656762024582802558939120369493
N = 139062845232271224121604081712127756574829750994819806133082624159264093538061401001847472855914603074934538700985798553196169799681310565488812324235985815731186882762045899073877401244364116654117446111538205094395819407032486519844416577739385388519998726871321612903150483200686546285155751607596546340899
C = 77 81 2f 94 ed 89 d2 3a 00 fd 62 99 c8 2a e0 61b1 bb f7 9a b8 80 24 9e 9f c2 22 a4 dc 7d 34 3269 f0 cd 2f 71 87 d1 13 64 7b c3 3d b5 30 bb d064 99 fc c9 67 40 c6 eb 1b 5f df aa 1b c5 0f 2450 b4 de 42 54 0f 52 fb ab 05 c3 89 4a 84 c9 8cae c1 c2 42 21 03 93 63 e6 3b da 64 2b 99 38 d2b4 06 1b 67 59 cd 66 b9 b9 14 8b ea 93 15 57 47a2 b9 db 45 08 2a 07 9f 4b b2 34 31 b9 03 99 8f
Trabalho 2: Funções sobre GF(2n) e GF(2)n
No que se segue, cp é um polinómio característico de GF(2n), B é uma base de GF(2n) e (.)~: GF(2n) -> GF(2)n denota a representação vectorial de um elemento x de GF(2n) segundo a base B, isto é, x = B.x~. A representação xs (respectivamente, As) denota o vector (ou matriz) cujas componentes são dadas por xs[i] = sigi(x) (respectivamente, As[i,j] = sigj(A[i])), sigi o automorfismo de ordem i.
Igualmente, T é a matriz dos traços cruzados (T[i,j] = tr(bi.bj), bi,bj elementos de B, em que tr(.) denota o traço) e B' = T-1B é a base dual de B.
1. Escreva um programa em Pari que, dado um polinómio característico cp e, opcionalmente, uma base B, construa as várias componentes e funções descritas acima: Bs, T, T-1, B', Bs', (.)~,...
2. Considere a S-box de Rijndael usada no AES Rijndael S-box que define uma transformação afim g~(y~) = H y~ + b~.
Usando as funções anteriores, reconstrua g(y) = b + h.xs, com =h = (H B')st B.
3. Verifique que a sua implementação reflecte o facto 28 na página 184-185 dos apontamentos.
Prazo de entrega:
Os trabalhos deverão ser enviados por email até ao dia 20/7/2007.
--PaulaCristinaValenca? - 11 Jun 2007
A GMP (GNU Multi-Precision Arithmetic Library) e' uma biblioteca que permite efectuar ca'lculos sobre nu'meros com precisao arbitra'ria (inteiros, racionais, e reais) com elevada eficiciencia. E' utilizada, por exemplo como base para a NTL, uma ferramenta para teoria dos nu'meros muito utilizada em criptografia. O que se pretende neste projecto e' o desenvolvimento de uma interface que permita tirar partido das funcionalidades de calculo sobre Z e Zp implementadas na GMP dentro de programas Haskell. A interface devera' ser o mais transparente possi'vel: devera' ser natural para um programador em Haskell. Os beneficios de eficiencia deverao ser medidos atrave's da implementacao de alguns algoritmos criptogra'ficos e.g. RSA, El-Gamal que operem sobre n'umeros de tamanho realista. A GMP pode ser obtida em http://www.swox.com/gmp/.
A esteganografia e' a ciencia de esconder informacao, de forma segura, em suportes digitais, como sejam ficheiros de imagem. O que se pretende com este projecto ´e o estudo da esteganografia como tecnologia de suporte `a comunicacao segura, no sentido criptogr´afico do termo. Depois de uma an´alise de bibliografia relevante, o objectivo ser´a a implementacao de um sistema de troca de informacao segura com base em t´ecnicas de esteganografia.
Pretende-se com este projecto implementar uma livraria em JAVA que possa ser utilizada em sistemas de votacao electr´onica. A livraria dever´a conter implementacoes das primitivas criptogr´aficas utilizadas nas diversas variantes deste tipo de sistemas: nao s´o cifras, mas tamb´em esquemas mais complexos como blind signatures, bit commitments, provas de conhecimento zero, etc. Na fase final dever´a ser desenvolvido um pequeno applet que exemplifique as potencialidades da biblioteca desenvolvida.
Sumário: Assinaturas digitais, identificação de agentes, protocolos de conhecimento zero, mecanismo desafio-resposta. -- ManuelBernardoBarbosa - 20 Apr 2006
Sumário: Comunicação utilizando cifras assimétricas. Segurança teórica de cifras assimétricas. Autenticação de origem de mensagens. Funções de hash criptográficas. Message Authentication Codes. -- ManuelBernardoBarbosa - 06 Apr 2006
Sumário: Comunicação utilizando cifras simétricas, chaves de sessão. Acordo e distribuição de chaves. Education.Criptografia de chave pública. Acordo de chaves Diffie Hellman. Cifras assimétricas. Cifra RSA. -- ManuelBernardoBarbosa - 30 Mar 2006.
Sumário: Implementação de CBC a partir de ECB sobre openssl. Segurança teórica de cifras simétricas. -- ManuelBernardoBarbosa - 23 Mar 2006
Sumário: Modos de utilização de cifras por blocos: ECB, CBC, OBF e CFB -- ManuelBernardoBarbosa - 16 Mar 2006.
Sumário: Implementação em C de cifragem RC4. Cifras por blocos. DES, IDEA e AES. Padding. -- ManuelBernardoBarbosa - 9 Mar 2006.
Sumário: Segurança da Informação. Cifras e Chaves. Segurança de uma cifra. One-Time-Pad. Cifras Sequenciais. -- ManuelBernardoBarbosa - 2 Mar 2006.
Para consultar o exame da época especial, contactar o docente da disciplina. -- -- ManuelBernardoBarbosa - 20 Set 2007
Os exames de recurso poderão ser cunsultados na 5a feira dia 26 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 25 Jul 2007
O exame oral realizar-se-á na 2a feira, dia 9 de Julho, às 15:00, no Departamento de Informática em Gualtar/Braga. O aluno em questão deverá contactar o docente por e-mail, no caso da existência de algum impedimento à realização do exame oral nesta data. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da 2a chamada poderão ser consultados na 2a feira dia 9 de Julho entre as 14:30 e as 15:00 no Departamento de Informática em Gualtar/Braga. -- ManuelBernardoBarbosa - 6 Jul 2007
Os exames da primeira chamada poderão ser consultados na aula de dúvidas de 5a feira. -- ManuelBernardoBarbosa - 27 Jun 2007
Haverá uma aula de dúvidas de Criptografia, antes do exame da 2a chamada. Terá lugar na 5a feira, dia 28 de Junho, às 16:00, na sala de aula onde decorreram as aulas da disciplina. -- ManuelBernardoBarbosa - 26 Jun 2007
Todos os grupos irão apresentar os projectos no dia 26 de Junho.
Apesar de o exame estar marcado para a parte da manhã, por conveniência dos docentes as apresentações terão lugar de tarde, a partir das 14:30 no laboratório das aulas da disciplina.
Cada grupo deverá enviar por e-mail o relatório até às 12:00 do dia 26, para que seja possível faze-lo chegar a todos os docentes atempadamente.
No laboratório, cada grupo deverá entregar o relatório em papel e disporá de 15 minutos para apresentar o projecto, podendo recorrer a uma apresentação projectada se assim o entenderem os seus elementos.
No final haverá lugar para 15 a 20 minutos de perguntas individuais.
O escalonamento das apresentações será o seguinte:
As entregas dos relatórios e apresentações dos trabalhos serão realizadas nas datas reservadas para os exames da época normal da disciplina: 11 de Junho (T) e 26 de Junho (M). As entregas terão lugar no laboratório onde decorrem as aulas da disciplina. Os alunos poderão optar por qualquer uma destas datas para efectuar a entrega, devendo para esse efeito enviar um e-mail até 24 horas antes da hora da apresentação.
A deadline para entrega do relatório intermédio é 6a Feira dia 30 de Março às 23:59. Os relatórios, em formato PDF, deverão ser enviados por e-mail para Manuel Bernardo Barbosa. Deverão descrever, nomeadamente:
O estado actual do projecto.
O resultado da análise de requisitos.
Uma proposta de arquitectura.
Uma descrição das tecnologias a adoptar.
Um planeamento temporal da implementação do projecto.
Uma descrição das decisões de implementação já tomadas em cada uma das componentes tecnológicas abordadas no projecto.
Ter obtido aprovação em Laboratórios de Comunicações II e IV e frequentado Laboratórios de Comunicações I , III e V.
Resultados da aprendizagem
Competências gerais:
Utilizar correctamente o ambiente laboratorial, incluindo os seguintes equipamentos: computadores ligados em rede (LAN), comutadores Ethernet e routers IP.
Descrever os principais protocolos de encaminhamento interno e externo utilizados na Internet;
Descrever os principais protocolos de encaminhamento multicast usados nas redes IP;
Descrever soluções capazes de dotar a Internet de qualidade de serviço (QoS? );
Descrever protocolos, técnicas e algoritmos para sistemas de criptografia.
Competências específicas:
Montar e configurar uma rede de computadores de área local, baseada em tecnologia IEEE 802.3 (Ethernet), envolvendo:
Sistema de cablagem
Instalação e configuração de elementos activos de nível 2 (comutadores Ethernet)
Estabelecer uma rede IP, envolvendo:
Instalação e configuração de elementos de nível 3 (router IP)
Instalação e configuração de serviços DHCP e NAT
Instalar e configurar um serviço DNS.
Criar e manipular uma base de dados (localmente e remotamente)
Utilizar serviços básicos de segurança.
Organização e Funcionamento
O projecto será desenvolvido em grupos de 2 alunos dentro e fora das aulas da disciplina (2 sessões semanais de 2 horas cada).
Nos pontos de controlo a definir e no fim do semestre, cada grupo apresentará à equipa docente e à turma o trabalho realizado e os resultados obtidos, devendo entregar um relatório técnico de desenvolvimento devidamente estruturado e fundamentado.
Em cada aula estarão presentes dois docentes que irão esclarecendo questões específicas dentro da sua área de trabalho.
Avaliação
A nota final será calculada aproximadamente de acordo com a seguinte expressão:
Nota Final = 0.3 Q + 0.2 RI + 0.3 RF + 0.2 AF
Em que a descrição de cada parâmetro é a seguinte:
Q - Testes de avaliação contínua efectuados em algumas aulas laboratoriais.
RI - Relatório intermédio - Pequeno relatório que apresentará já a estrutura do relatório final a apresentar a meio do semestre.
RF - Relatório final - Este relatório reflectirá todo o trabalho desenvolvido durante o semestre nesta disciplina.
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ...
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ...
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ...
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ...
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ...
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ...
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ...
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ...
Notícias 2007 2008 Criptografia Aplicada Criptografia e Segurança da Informação (Edição 2006 2007, Edição 2005 2006, Edição 2004 2005) Equipa Docente Jos ...
Criptografia (MICEI) / Segurança e Privacidade de Sistemas de Armazenamento e Transporte de Dados (MSDPA) Ano Lectivo 2006 2007 Ano Lectivo 2006 2007 Docente ...
Notícias Education.Criptografia (MICEI) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA) 2004 2005 Docente AlcinoCunha ...
Para consultar o exame da época especial, contactar o docente da disciplina. ManuelBernardoBarbosa 20 Set 2007 Os exames de recurso poderão ser cunsultados na ...
Projectos de Opção III 2006/2007 Todos os seguintes projectos serão orientados por MBB ou JBA conjuntamente com um elemento da empresa Multicert. Microsoft Office ...
Notas saíram as notas da 1ª chamada PaulaCristinaValenca 27 Jul 2007 JOIN'07 devido a estar a decorrer as join'07, não haverá aula dia 10/05. PaulaCristinaValenca ...
Projectos a data limite para a entrega dos projectos (protocolo Multicert/UM ) é 30 de Setembro de 2006. JoseBacelarAlmeida 11 Set 2006 Classificações As ...
Notícias Elementos/Fundamentos de Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º ...
27 Jul Já sairam as notas da época de recurso. 15 Jul Já sairam as notas da época normal. 1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem ...
Sessões laboratoriais de EC 5ª feira, 16:00 18:00, DI 1.04 01/03/2007 Introdução ao PARI/GP Esta sessão é acompanhada de um documento PDF que apresenta uma vers ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Education.Criptografia Aplicada 2004 2005 Notas Notas do exame de recurso (contactar MBB por e mail para agendar exame oral) Notas dos trabalhos ...
Notícias Criptografia Aplicada 2006 2007 (Edição 2005 2006, Edição 2004 2005) Notas Notas da época especial Notas da Época de Recurso Notas do exame ...
Sessões laboratoriais de CA (2007/2008) #AulaUm Aula 1 Ambiente de Desenvolvimento O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento ...
Mini Projectos Projecto 4: Site para intranet com autenticação baseada em Certificados X509 Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro ...
22 02 2008 Já estão disponíveis as notas do exame de recurso. DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2 105). 28 01 2008 Já estão dispon ...
Para consultar os exames da época especial, contactar mbb. ManuelBernardoBarbosa 20 Set 2007 Consultas a exames de recurso: 4a Feira, dia 28 de Fevereiro, entre ...
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da ...
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ...
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ...
Já estão disponíveis as notas do exame de recurso ManuelBernardoBarbosa 23 Fev 2006 Para consultar os exames, contactar docente na segunda feira dia 6 de ...
A folha de inscrições para as apresentações dos trabalhos está disponível na recepção do DI. As entregas terão lugar nos dias 1,2,9 e 10 de Fevereiro, da parte da ...
Para consultar os exames da época especial, contactar mbb. ManuelBernardoBarbosa 20 Set 2007 Consultas a exames de recurso: 4a Feira, dia 28 de Fevereiro, entre ...
22 02 2008 Já estão disponíveis as notas do exame de recurso. DATA DO EXAME DE RECURSO: dia 13 de Fevereiro, às 9:30 (sala CP2 105). 28 01 2008 Já estão dispon ...
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ...
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ...
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ...
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ...
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ...
Notícias Education.Criptografia Aplicada 2004 2005 Notas Notas do exame de recurso (contactar MBB por e mail para agendar exame oral) Notas dos trabalhos ...
Notícias Criptografia Aplicada 2006 2007 (Edição 2005 2006, Edição 2004 2005) Notas Notas da época especial Notas da Época de Recurso Notas do exame ...
Notícias 2007 2008 Criptografia Aplicada Criptografia e Segurança da Informação (Edição 2006 2007, Edição 2005 2006, Edição 2004 2005) Equipa Docente Jos ...
Mini Projectos Projecto 4: Site para intranet com autenticação baseada em Certificados X509 Prazo: 3 semanas (entrega/demonstração na aula do dia 8 de Janeiro ...
Sessões laboratoriais de CA (2006/2007) Aula 1 Arquitectura Cliente Servidor Pretende se construir uma plataforma que permita a um número arbitrário de clientes ...
Sessões laboratoriais de CA (2007/2008) #AulaUm Aula 1 Ambiente de Desenvolvimento O objectivo principal desta aula é o de escolher/instalar o ambiente de desenvolvimento ...
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ...
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ...
14 Out As notas do exame de recurso já saíram. 25 Jul As notas do exame já saíram. Caso o desejem, é possível marcar um exame oral para os alunos que reprovaram ...
Sumário: IPSec e Secure Sockets Layer (SSL/TLS). ManuelBernardoBarbosa 2 Jun 2006 Sumário: On Line Certificate Status Protocol. ManuelBernardoBarbosa ...
Notícias Education.Criptografia (MICEI) Segurança e Privacidade em Sistemas de Armazenamento e Transporte de Dados (MSDPA) 2004 2005 Docente AlcinoCunha ...
Criptografia (MICEI) / Segurança e Privacidade de Sistemas de Armazenamento e Transporte de Dados (MSDPA) Ano Lectivo 2006 2007 Ano Lectivo 2006 2007 Docente ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ...
Notícias Elementos/Fundamentos de Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computação 4º ...
27 Jul Já sairam as notas da época de recurso. 15 Jul Já sairam as notas da época normal. 1 Jul A data limite para entrega de trabalhos é o dia 13 de Julho. Marquem ...
Projectos a data limite para a entrega dos projectos (protocolo Multicert/UM ) é 30 de Setembro de 2006. JoseBacelarAlmeida 11 Set 2006 Classificações As ...
Notas saíram as notas da 1ª chamada PaulaCristinaValenca 27 Jul 2007 JOIN'07 devido a estar a decorrer as join'07, não haverá aula dia 10/05. PaulaCristinaValenca ...
Projectos Os projectos aqui propostos deverão ser apresentados sobre a forma de monografia. De uma forma genérica, consistem no aprofundamento de um determinado tema ...
Elementos de Education.Criptografia Trabalho Prático 1 (9 Mar) Efectue a criptoanálise destes quatro criptogramas que foram obtidos recorrendo a cifras de substitui ...
Sessões laboratoriais de EC 5ª feira, 14:00 16:00, DI 1.04 23/02/2006 Apresentação Apresentação e inscrição nos turnos. 02/03/2006 Introdução ao ao PARI ...
Sessões laboratoriais de EC 5ª feira, 16:00 18:00, DI 1.04 01/03/2007 Introdução ao PARI/GP Esta sessão é acompanhada de um documento PDF que apresenta uma vers ...
Trabalhos Práticos de EC 2006/2007 Trabalho 1: Cifra RSA Implemente em PARI/GP a geração de chaves RSA assim como as primitivas de cifragem e decifragem RSA ...
Sumário: Entrega de trabalhos práticos. ManuelBernardoBarbosa 6 Jun 2006 Sumário: On Line Certificate Status Protocol (OCSP) e Secure Sockets Layer (SSL) ...
Para consultar o exame da época especial, contactar o docente da disciplina. ManuelBernardoBarbosa 20 Set 2007 Os exames de recurso poderão ser cunsultados na ...
Projectos de Opção III 2006/2007 Todos os seguintes projectos serão orientados por MBB ou JBA conjuntamente com um elemento da empresa Multicert. Microsoft Office ...
This is a subscription service to be automatically notified by e mail when topics change in this Education/Criptografia web. This is a convenient service, so you ...
Education/Criptografia Web Preferences The following settings are web preferences of the Education/Criptografia web. These preferences overwrite the site level ...
TWiki's Education/Criptografia web /view/Education/Criptografia The Education/Criptografia web of TWiki. TWiki is a Web Based Collaboration Platform for the Corporate ...
Workshop em Segurança da Informação Departamento de Informática da Universidade do Minho 23 de Fevereiro de 2007 Apresentação A Workshop em Segurança de Informa ...
This is a subscription service to be automatically notified by e-mail when topics change in this Education/Criptografia web. This is a convenient service, so you do not have to come back and check all the time if something has changed. To subscribe, please add a bullet with your WikiName in alphabetical order to this list:
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track using one of these bullet list formats:
three spaces * [ webname . ] wikiName - SMTP mail address three spaces * [ webName . ] wikiName three spaces * SMTP mail address three spaces * SMTP mail address : topics three spaces * [ webname . ] wikiName : topics
In the above examples, topics is a space-separated list of topic names. The user may further customize the specific content they will receive using the following formats:
Specify topics without a Web. prefix
Topics must exist in this web.
Topics may be specified using * wildcards
Each topic may optionally be preceded by a '+' or '-' sign. The '+' sign means "subscribe to this topic" (the same as not putting anything). The '-' sign means "unsubscribe" or "don't send notifications regarding this topic". This allows users to elect to filter out certain topics (and their children, to an arbitrary depth). Topic filters ('-') take precedence over topic includes ('+').
Each topic may optionally be followed by an integer in parentheses, indicating the depth of the tree of children below that topic. Changes in all these children will be detected and reported along with changes to the topic itself. Note This uses the TWiki "Topic parent" feature.
Each topic may optionally be immediately followed by an exclamation mark ! or a question mark ? with no intervening spaces, indicating that the topic (and children if there is a tree depth specifier as well) should be mailed out as complete topics instead of change summaries. ! causes the topic to be mailed every time even if there have been no changes, ? will mail the topic only if there have been changes to it. This only makes sense for subscriptions.
For example:
Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.com
Subscribe Daisy to all changes in all webs that start with Web.
* daisy.cutter@flowers.com: Web*
Subscribe Daisy to changes to topics starting with Petal, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty and end with Flowers e.g. PrettyPinkFlowers
Subscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: TWiki.NewsLetter?
Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: TWiki.NewsLetter! (1)
Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup? :
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a TWiki group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom? (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
Related topics:WebChangesAlert, TWikiUsers, TWikiRegistration
The following settings are web preferences of the Education.Criptografia web. These preferences overwrite the site-level preferences in TWikiPreferences, and can be overwritten by user preferences (your personal topic, eg: TWikiGuest in the Main web).
Preferences:
If yes, set SITEMAPLIST to on, do not set NOSEARCHALL, and add the "what" and "use to..." description for the site map. Make sure to list only links that include the name of the web, e.g. Education/Criptografia.Topic links.
Set SITEMAPLIST = on
Set SITEMAPWHAT = Criptografia @ DI
Set SITEMAPUSETO =
Exclude web from a web="all" search: (Set to on for hidden webs)
Set NOSEARCHALL =
Prevent automatic linking of WikiWords and acronyms (if set to on); link WikiWords (if empty); can be overwritten by web preferences:
Set NOAUTOLINK =
Note: Use the [[...][...]] syntax to link topics in case you disabled WikiWord linking. The <noautolink> ... </noautolink> syntax can be used to prevents links within a block of text.
Default template for new topics and form(s) for this web:
WebTopicEditTemplate? : Default template for new topics in this web. (Site-level is used if topic does not exist)
A preference is defined as: 6 spaces * Set NAME = value Example:
Set WEBBGCOLOR = #FFFFC0
Preferences are used as TWikiVariables by enclosing the name in percent signs. Example:
When you write variable %WEBBGCOLOR% , it gets expanded to #99CC00 .
The sequential order of the preference settings is significant. Define preferences that use other preferences first, i.e. set WEBCOPYRIGHT before WIKIWEBMASTER since %WEBCOPYRIGHT% uses the %WIKIWEBMASTER% variable.
You can introduce new preferences variables and use them in your topics and templates. There is no need to change the TWiki engine (Perl scripts).
TWiki's Education/Criptografia web
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia
The Education/Criptografia web of TWiki. TWiki is a Web-Based Collaboration Platform for the Corporate World.en-usCopyright 2020 by contributing authorsTWiki Administrator [webmaster@di.uminho.pt]The contributing authors of TWikiTWikiDIUM.Education/Criptografia
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia
/twiki/pub/Main/LocalLogos/um_eengP.jpgCSSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI0809
Criptografia e Segurança de Sistemas de Informação Edição 2008/2009 2009/2010 (incluindo temas de tese) Equipa Docente José Manuel Valença (TC) Manuel ... (last changed by ManuelBernardoBarbosa)2009-09-29T17:01:09ZManuelBernardoBarbosaCSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSI0809
Criptografia e Segurança da Informação 2008/2009 Programa Teoria: Introdução: conceitos e terminologia. Cifras simétricas: sequenciais e por blocos ... (last changed by JoseBacelarAlmeida)2009-07-22T01:44:11ZJoseBacelarAlmeidaAvisosCSSI0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/AvisosCSSI0809
13/07: Disponíveis notas de GSI/PSC (secção de Avaliação). 15/06: Disponíveis notas finais do módulo de SSI (secção de Avaliação). 03/03: Disponíveis notas finais ... (last changed by ManuelBernardoBarbosa)2009-07-13T18:34:50ZManuelBernardoBarbosaCriptografiaBiomedica0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptografiaBiomedica0809
Criptografia 2008 2009 Licenciatura em Engenharia Biomédica (Edição 2006 2007; Edição 2005 2006) Equipa Docente José Carlos Bacelar Almeida (responsável pela ... (last changed by JoseBacelarAlmeida)2009-07-02T17:11:58ZJoseBacelarAlmeidaCriptoBio0809Programa
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBio0809Programa
Criptografia (MIEBIO) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia Conceitos ... (last changed by JoseBacelarAlmeida)2009-07-02T16:56:53ZJoseBacelarAlmeidaCSSI-PI0809-2
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI-PI0809-2
Projecto Integrador Sumários (2º Sem.) MI CSSI (2008/2009) 03/03/2009, 14:00 16:00 Apresentação dos projectos do 2º semestre: Sistema de Armazenamento ... (last changed by JoseBacelarAlmeida)2009-07-01T16:24:30ZJoseBacelarAlmeidaCSSI-PI0809-1
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSSI-PI0809-1
Projecto Integrador Sumários (1º Sem.) MI CSSI (2008/2009) 30/09/2008, 18:00 20:00 Ambiente de Desenvolvimento Utilização do framework JCA/JCE . Continua ... (last changed by JoseBacelarAlmeida)2009-07-01T15:49:03ZJoseBacelarAlmeidaCSI0809Programa
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSI0809Programa
Criptografia e Segurança da Informação (UCE CSSI) Programa detalhado (2008/2009) Teórica Introdução e Terminologia Criptografia, Criptoanálise e Criptologia ... (last changed by JoseBacelarAlmeida)2009-07-01T11:30:37ZJoseBacelarAlmeidaElementosCriptografia0506
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/ElementosCriptografia0506
Notícias Elementos/Fundamentos de Education.Criptografia Licenciatura em Engenharia de Sistemas e Informática Licenciatura em Matemática e Ciências da Computa ... (last changed by JoseBacelarAlmeida)2009-05-14T23:35:16ZJoseBacelarAlmeidaAvisosCriptoBio0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/AvisosCriptoBio0809
03/02/2009: Já estão disponíveis as notas do teste. 12/01/2009: Já está disponível a avaliação prática da disciplina. 30/12/2008: Sessão de defesa dos trabalhos ... (last changed by JoseBacelarAlmeida)2009-02-04T05:08:43ZJoseBacelarAlmeidaCriptoBioT0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBioT0809
Criptografia Mestrado Integrado em Engenharia Biomédica Sumários das aulas Teóricas (2008/2009) Aula 1: 18/09/2008 Apresentação da disciplina. Aula 2: 25/09 ... (last changed by JoseBacelarAlmeida)2008-12-13T23:16:09ZJoseBacelarAlmeidaCriptoBioTP0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptoBioTP0809
Criptografia Mestrado Integrado em Engenharia Biomédica Guiões das aulas Teórico Práticas 2008/2009 Aula 1: 18/09/2008 Apresentação da disciplina. Aula 2: ... (last changed by JoseBacelarAlmeida)2008-12-11T10:56:57ZJoseBacelarAlmeidaCSITP0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSITP0809
Conceitos de Sistemas Criptográficos (TP) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 16:00 18:00 Ambiente de Desenvolvimento O objectivo principal ... (last changed by JoseBacelarAlmeida)2008-12-07T22:56:31ZJoseBacelarAlmeidaCriptografiaBiomedicaProj0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CriptografiaBiomedicaProj0809
Mini Projecto Prático Descrevem se os projectos práticos da disciplina de Criptografia do Mestrado Integrado em Engenharia Biomédica. As componentes aplicacionais ... (last changed by JoseBacelarAlmeida)2008-12-05T22:56:47ZJoseBacelarAlmeidaCSIT0809
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/CSIT0809
Conceitos de Sistemas Criptográficos (T) Sumários MI CSSI (2008/2009) #AulaUm Aula 1 30/09/2008, 14:00 16:00 Apresentação do Módulo: programa, organizaç ... (last changed by JoseBacelarAlmeida)2008-11-25T22:26:05ZJoseBacelarAlmeidaWebSideBar
http://wiki.di.uminho.pt/twiki/bin/view/Education/Criptografia/WebSideBar
Disciplinas Criptografia (Biomédica) CSSI Outras Avisos " else ""}% (last changed by JoseBacelarAlmeida)2008-10-05T21:13:35ZJoseBacelarAlmeida
Departamento de Informática da Universidade do Minho
23 de Fevereiro de 2007
Apresentação
A Workshop em Segurança de Informação terá lugar no dia 23 de Fevereiro de 2007, no âmbito do Simpósio Doutoral do Departamento de Informática (SDDI), na Universidade do Minho.
O objectivo deste evento é apresentar diferentes vertentes de investigação científica em Segurança da Informação desenvolvidas no nosso país por grupos com impacto internacional.
Sendo este um evento essencialmente de divulgação, o conteúdo das comunicações será moderadamente técnico, tendo um público alvo bastante alargado. A Workshop destina-se não só a investigadores na área, mas também a alunos de licenciatura e pós graduação, que poderão perceber o que significa fazer investigação em Segurança da Informação e, naturalmente, a qualquer membro da comunidade com interesse ou curiosidade por esta temática.
Departamento de Informática, Universidade do Minho
9:20
Provas de Segurança Criptográfica
Manuel Bernardo Barbosa
Departamento de Informática, Universidade do Minho
9:40
Complexidade Algorítmica e Aplicações
Luís Antunes
Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do Porto
10:00
Redes Seguras: Camada Física, Roteamento Seguro, Codificação de Rede
João Barros
Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do Porto
10:20
Arquitecturas de Segurança: votação electrónica, autenticação multi-domínio, LANs seguras
André Zúquete
Departamento de Electrónica, Telecomunicações e Informática, Universidade de Aveiro
10:40
Intervalo
11:00
Segurança Quântica
Paulo Mateus
Departamento de Matemática, Instituto Superior Técnico
11:20
Análise de protocolos de segurança
Carlos Caleiro
Departamento de Matemática, Instituto Superior Técnico
11:40
Cryptographic Sound Implementations of Symbolic Cryptography
Pedro Adão
Departamento de Matemática, Instituto Superior Técnico
12:00
Painel de Discussão
José Bacelar Almeida
Departamento de Informática, Universidade do Minho
13:00
Encerramento
Localização
A Workshop terá lugar no edifício do Departamento de Informática, no Campus de Gualtar da Universidade do Minho, em Braga.
Esta página contém informação sobre como chegar até ao DIUM.
-- ManuelBernardoBarbosa - 13 Feb 2007
Found 74 topics.
Other search options:
If you already know the name of the topic, enter the name of the topic into the Jump box at the top
Departamento de Informática da Universidade do Minho
23 de Fevereiro de 2007
Apresentação
A Workshop em Segurança de Informação terá lugar no dia 23 de Fevereiro de 2007, no âmbito do Simpósio Doutoral do Departamento de Informática (SDDI), na Universidade do Minho.
O objectivo deste evento é apresentar diferentes vertentes de investigação científica em Segurança da Informação desenvolvidas no nosso país por grupos com impacto internacional.
Sendo este um evento essencialmente de divulgação, o conteúdo das comunicações será moderadamente técnico, tendo um público alvo bastante alargado. A Workshop destina-se não só a investigadores na área, mas também a alunos de licenciatura e pós graduação, que poderão perceber o que significa fazer investigação em Segurança da Informação e, naturalmente, a qualquer membro da comunidade com interesse ou curiosidade por esta temática.
Departamento de Informática, Universidade do Minho
9:20
Provas de Segurança Criptográfica
Manuel Bernardo Barbosa
Departamento de Informática, Universidade do Minho
9:40
Complexidade Algorítmica e Aplicações
Luís Antunes
Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do Porto
10:00
Redes Seguras: Camada Física, Roteamento Seguro, Codificação de Rede
João Barros
Departamento de Ciência de Computadores, Faculdade de Ciências da Universidade do Porto
10:20
Arquitecturas de Segurança: votação electrónica, autenticação multi-domínio, LANs seguras
André Zúquete
Departamento de Electrónica, Telecomunicações e Informática, Universidade de Aveiro
10:40
Intervalo
11:00
Segurança Quântica
Paulo Mateus
Departamento de Matemática, Instituto Superior Técnico
11:20
Análise de protocolos de segurança
Carlos Caleiro
Departamento de Matemática, Instituto Superior Técnico
11:40
Cryptographic Sound Implementations of Symbolic Cryptography
Pedro Adão
Departamento de Matemática, Instituto Superior Técnico
12:00
Painel de Discussão
José Bacelar Almeida
Departamento de Informática, Universidade do Minho
13:00
Encerramento
Localização
A Workshop terá lugar no edifício do Departamento de Informática, no Campus de Gualtar da Universidade do Minho, em Braga.
Esta página contém informação sobre como chegar até ao DIUM.
-- ManuelBernardoBarbosa - 13 Feb 2007