Java Card - Criptografia problema no setExponent

7 respostas
murilo.ramos

Olá pessoal

Sou novo no forum e não achei uma área certa para o JavaCard, mas como também envolve Criptografia, ai vai:

Estou trabalhando com JavaCard e preciso construir uma chave pública dentro do cartão, com um módulo e expoente criado fora do cartão, estou conseguindo mandar normalmente o modulo e o expoente para o cartão mas na hora de criar a chave que está o problema.
A chave é criado usando uam KeyBuilder e é especificado o tipo e tamanho, depois disso é preciso utilizar dois metodos para setar o módulo e expoente, que são o setModulus() e o setExponent(), o setModulus funciona normalmente, mas não sei porque toda vez que é executado no cartão o setExponent ele trava o cartão, é retornado pra mim um comando inválido e o mais estranho e que nenhuma das outras funções que eu tinha programado funciona mais, parece que ele dá meio que uma “tela azul” no cartão rsrs.

alguem que conheça JavaCard sabe o que pode estar acontecendo?

Código:
chavepublica.setExponent(byte[], short, short);

onde o primeiro argumento é o modulo que foi enviado para o cartão
o segundo argumento é o ofsset
e o terceiro é o tamanho do byte[]

a todos, Obrigado

7 Respostas

murilo.ramos

Como eu já esperava rsrs, ninguem postou, esse assunto ainda infelizmente ainda é muito desconhecido no Brasil, até pra mim que estou trabalhando com isso ainda fico perdido rsrs

mas para quem puder ajudar, eu consegui fazer o processo, só que consegui com a Chave Privada, isso que é mais estranho, quando tento com a chave pública não dá certo, mas quando tento com a privada funciona normal

Alguem teria alguma explicação para isso?

Obrigado :smiley:

F

Aguenta ai q alguem vai responder com certeza murilo…!

abraços

A

Olá cara. Se você ainda existe, por favor, me esclareça algumas dúvidas a respeito do seu problema.

  1. qual o tipo e o tamanho de chave que vc criou no KeyBuilder?
  2. qual os valores do módulo e do expoente publico enviados para o cartão? Gostaria de ver os valores em hexa.
  3. se possível disponibilize o trecho de código referente ao comando de importação da chave pública.
murilo.ramos

aow…

Ainda existo sim rsrs, mas posto muito pouco aqui pois só quando não consigo achar algo na net que eu venho postar o problema rsrs

mas então o código eu não lembro agora, pois eu consegui resolver o problema e o projeto já foi finalizado, mas caso vc precise dele eu tento conseguir de novo.

Como eu resolvi esse problema eu ainda lembro de cór, pq foi uma coisa ridicula, era questão de padding, ou seja o codigo que construi de recriação da chave estava certo, mas o problema era na hora de enviar o expoente, a unica coisa que precisei fazer era colocar um “00” antes do valor do expoente, enviado no APDU (pra quem num sabe APDU são comandos em HEXADECIMAL enviados aos cartão).

isso resolveu o problema rsrs, fazendo um representaçaõ ficou mais ou menos assim

apdu.Send(“00”+ValorExponent);

ai no codigo dentro do cartão ele funcionou direitinho, sem dar problema algum, criptografando e tudo mais rsrs

deu pra entender? rsrs

e o tamanho da chave era de 1024

Vlw

A

Opa!

Que bom que você conseguiu resolver o problema. Eu não estou precisando do código não. Só
estava tentando ajudar, já que eu tenho um pouco de experiência com isso.

Agora a solução encontrada por você eu acredito que não seja problema de padding. O que pode
ter acontecido é que você deve ter escolhido um expoente público (que nada mais é que um número,
assim como o próprio módulo) onde o bit mais significativo esteja setado, ou seja, um número negativo
na notação em complemento de dois utilizada no java. Como os atributos de uma chave RSA não podem
receber números negativos, passando o expoente público prefixado por um byte 0x00, faz com o o java
enxergue o número como positivo.

Se você conseguisse lembrar qual era o valor do expoente da chave a gente matava essa questão. É
muito comum, para qualquer chave RSA, utilizar um expoente público fixo com o valor 65537 (0x010001
em hexa). É bem provável que você utilizou um valor diferente, já que com esse valor você não teria o
problema que teve.

E

Parece que esses cartões só aceitam um ou dois valor de expoente (tipicamente 3 e 65537), já pré-programado neles.

A

Vou testar segunda-feira lá na empresa e te respondo.

Criado 22 de setembro de 2009
Ultima resposta 13 de ago. de 2010
Respostas 7
Participantes 4