Jump to content

Recommended Posts

Posted

Boa tarde,

No documento da AT diz que "Para garantir a confidencialidade, a chave simétrica tem de ser cifrada com a chave pública do Sistema de Autenticação de acordo com o algoritmo RSA e codificada em Base 64".

Eu preciso implementar isso em oracle pl/sql.

A informação dos packages de encriptação tem estes algoritmos:

DBMS_CRYPTO Cryptographic Hash Functions

HASH_MD4, HASH_MD5, HASH_SH1

DBMS_CRYPTO MAC (Message Authentication Code) Functions

HMAC_MD5, HMAC_SH1

DBMS_CRYPTO Encryption Algorithms

ENCRYPT_DES, ENCRYPT_3DES_2KEY, ENCRYPT_3DES, ENCRYPT_AES128, ENCRYPT_AES192, ENCRYPT_AES256, ENCRYPT_RC4

DBMS_CRYPTO Block Cipher Suites

DES_CBC_PKCS5, DES3_CBC_PKCS5, alternativa: CHAIN_ECB ...

Alguem me sabe dizer se me consigo safar com isto ?

Cumprimentos

Fabio

Posted (edited)

Boa noite Rui,

Obrigado pela resposta. Mas já agora, ao nivel de base de dados acredita que tenho um ERP com centenas de utilizadores concurrenciais de várias empresas da mesma BD em multitenant, a gerar hash's do saft sem nunca ter havido problema. Em 80 milhoes de registos na base de dados, zero falhas de dados 🙂 Se há bom sitio para ter isso é mesmo ao nivel da BD... pelo menos garante que se o registo for inserido, é porque correu bem a assinatura do mesmo 😉

E pronto, lá vou ter que ter uma chamada ao OS para fazer a assinatura. Por acaso sabes me dizer como fazer com openssl a assinatura RSA referida no documento ?

Cumps

Fabio

O RC4 é uma cifra simétrica, enquanto que o RSA é assimétrica, pelo que são cifras consideravelmente diferentes.

Pelo que vi da documentação, o PL/SQL não disponibiliza o RSA.

Em todo o caso, não me parece grande ideia fazer este tipo de operações ao nível da BD.

Olá de novo Rui.

Sabes me dizer se a criação da hash nos documentos do SAFT usa o mesmo método? Não pois nao? pelo menos com openssl é chamado o método SHA1 certo?

Cumprimentos

Fabio

O RC4 é uma cifra simétrica, enquanto que o RSA é assimétrica, pelo que são cifras consideravelmente diferentes.

Pelo que vi da documentação, o PL/SQL não disponibiliza o RSA.

Em todo o caso, não me parece grande ideia fazer este tipo de operações ao nível da BD.

Edited by fakada
Posted

Obrigado pela resposta. Mas já agora, ao nivel de base de dados acredita que tenho um ERP com centenas de utilizadores concurrenciais de várias empresas da mesma BD em multitenant, a gerar hash's do saft sem nunca ter havido problema. Em 80 milhoes de registos na base de dados, zero falhas de dados 🙂 Se há bom sitio para ter isso é mesmo ao nivel da BD... pelo menos garante que se o registo for inserido, é porque correu bem a assinatura do mesmo 😉

Consegues fazer facilmente também usando uma outra linguagem (com as mesmas garantias). O grande problema é que o PL/SQL não foi feito para este tipo de funções, e dispões das bibliotecas que muitas outras linguagens genéricas dispõem.

E pronto, lá vou ter que ter uma chamada ao OS para fazer a assinatura. Por acaso sabes me dizer como fazer com openssl a assinatura RSA referida no documento ?

Vê se encontras o que pretendes neste tópico.

Sabes me dizer se a criação da hash nos documentos do SAFT usa o mesmo método? Não pois nao? pelo menos com openssl é chamado o método SHA1 certo?

Não sei. Mas é mais provável que use uma função de hash (como o SHA1) do que RSA.

Posted

É tens razão Rui... é SHA1.

Já andei nessas 27 páginas e nao consegui ver ninguem a fazer isso com openssl. 😞

Mas de certeza que o openssl dá para assinar isso... só que como para mim esta área de crypt é totalmente agua estranha... eu nem nadar consigo!

Consegues fazer facilmente também usando uma outra linguagem (com as mesmas garantias). O grande problema é que o PL/SQL não foi feito para este tipo de funções, e dispões das bibliotecas que muitas outras linguagens genéricas dispõem.

Vê se encontras o que pretendes neste tópico.

Não sei. Mas é mais provável que use uma função de hash (como o SHA1) do que RSA.

Posted (edited)

Boa tarde,

No documento da AT diz que "Para garantir a confidencialidade, a chave simétrica tem de ser cifrada com a chave pública do Sistema de Autenticação de acordo com o algoritmo RSA e codificada em Base 64".

Eu preciso implementar isso em oracle pl/sql.

A informação dos packages de encriptação tem estes algoritmos:

DBMS_CRYPTO Cryptographic Hash Functions

HASH_MD4, HASH_MD5, HASH_SH1

DBMS_CRYPTO MAC (Message Authentication Code) Functions

HMAC_MD5, HMAC_SH1

DBMS_CRYPTO Encryption Algorithms

ENCRYPT_DES, ENCRYPT_3DES_2KEY, ENCRYPT_3DES, ENCRYPT_AES128, ENCRYPT_AES192, ENCRYPT_AES256, ENCRYPT_RC4

DBMS_CRYPTO Block Cipher Suites

DES_CBC_PKCS5, DES3_CBC_PKCS5, alternativa: CHAIN_ECB ...

Alguem me sabe dizer se me consigo safar com isto ?

Cumprimentos

Fabio

Boas,

Eu acredito que é possível em puro pl/sql... porque estive perto, mesmo perto de descobrir, mas como não tenho tempo e a solução foi criar em java.

As versoes BD XE 10g e inferior nao aceita 'módulos' de java, mas corre lindamente em versões igual ou superior a DB 11g e XE 11g.

Cmps

Edited by ossadas
  • 1 year later...
Posted

Boa tarde,

No documento da AT diz que "Para garantir a confidencialidade, a chave simétrica tem de ser cifrada com a chave pública do Sistema de Autenticação de acordo com o algoritmo RSA e codificada em Base 64".

Eu preciso implementar isso em oracle pl/sql.

A informação dos packages de encriptação tem estes algoritmos:

DBMS_CRYPTO Cryptographic Hash Functions

HASH_MD4, HASH_MD5, HASH_SH1

DBMS_CRYPTO MAC (Message Authentication Code) Functions

HMAC_MD5, HMAC_SH1

DBMS_CRYPTO Encryption Algorithms

ENCRYPT_DES, ENCRYPT_3DES_2KEY, ENCRYPT_3DES, ENCRYPT_AES128, ENCRYPT_AES192, ENCRYPT_AES256, ENCRYPT_RC4

DBMS_CRYPTO Block Cipher Suites

DES_CBC_PKCS5, DES3_CBC_PKCS5, alternativa: CHAIN_ECB ...

Alguem me sabe dizer se me consigo safar com isto ?

Cumprimentos

Fabio

Viva Fábio,

Estou exactamente nessa situação!

A minha BD é uma 9i

O package de crypto ainda é apenas DBMS_CRYPTO_TOOLKIT

Necessito de guardar as ditas assinaturas dos documentos (facturas principalmente) e não faço a mínima ideia como faze-lo!

Tenho andado às voltas com o utl_encode.base64_encode mas os resultados não parecem iguais aos do exemplo da especificação da AT!

Será que alguém me pode apontar um caminho?

Obrigado

Carlos

  • 2 weeks later...
  • 2 years later...
Posted (edited)

Viva.

Ja pasou muito tempo desde a ultima mensagem neste topico.

Na altura que tive este problema tive de implementar chamadas a java para resolver o problema.

agora voltei ao assunto pois quero melhoar alguns aspectos do controle de transação.

 

Alguem tem alguma novidade sobre o asunto ?

uma alternativa e chamar um web service com utl_http!

 

Obrigado.

Edited by Xendro

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.