Come preparare i file di trasmissione dati FATCA con strumenti open source [chiuso]

1

Ecco il contesto: per trasmettere i dati FATCA al servizio US IRS il protocollo IDES definisce i seguenti passaggi

  1. firma il file Payload.xml XML con firma enveloping, SHA-256 con chiave privata RSA, come Payload-signed.xml .
  2. comprimere il file Payload-signed.xml XML firmato in un file zip Payload.zip
  3. genera una chiave da 32 byte a utilizzo singolo per AES-256
  4. crittografare l'archivio Zip Payload.zip con AES-256 come Payload
  5. crittografare l'AES con la chiave pubblica RSA per lo scambio come Key
  6. bundle chiave AES crittografata Key e file zip crittografato Payload in un archivio Zip

Come implementare questo processo con gli strumenti open source esistenti (con preferenza per la piattaforma Linux)?

Nota: questo progetto mostra come farlo con .Net

    
posta Yves Martin 30.06.2015 - 10:50
fonte

1 risposta

2

Ecco il processo che ho progettato con gli strumenti Linux disponibili. Presta attenzione a tutti i nomi di file (maiuscole e minuscole) e sostituisci MyOrgGIIN con l'identificativo GIIN della tua organizzazione.

  1. Esiste il rischio elevato che nel file XML FATCA siano presenti virgolette e virgole. Elimina questi caratteri dal file XML a evita errori durante l'invio (e alcuni altri come hash e doppio trattino, leggi questo PDF per i dettagli).

  2. Includi la tua struttura XML ftc:FATCA_OECD in un modello di firma che avviluppa specificando i metodi di cifratura e hash previsti ( Payload.xml ):

<?xml version="1.0" encoding="utf-8"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
    <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
    <Reference URI="#FATCA">
      <Transforms>
        <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      </Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
      <DigestValue></DigestValue>
    </Reference>
  </SignedInfo>
  <SignatureValue></SignatureValue>
  <KeyInfo>
    <X509Data>
      <X509SubjectName></X509SubjectName>
      <X509Certificate></X509Certificate>
    </X509Data>
  </KeyInfo>
  <Object Id="FATCA">
    <ftc:FATCA_OECD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="urn:oecd:ties:fatca:v1" xmlns:ftc="urn:oecd:ties:fatca:v1" 
      xmlns:iso="urn:oecd:ties:isofatcatypes:v1" 
      xmlns:sfa="urn:oecd:ties:stffatcatypes:v1" version="1.1">

      [... your data ...]

    </ftc:FATCA_OECD>
  </Object>
</Signature>
  1. Genera la firma XML nel modello preparato con xmlsec1 , riempirà i nodi vuoti:

xmlsec1 --sign --output MyOrgGIIN_Payload.xml --pkcs12 myorg_ssl_certificate.p12 --pwd pkcs12password Playload.xml

  1. Comprimi il payload XML firmato come archivio zip

zip MyOrgGIIN_Payload.zip MyOrgGIIN_Payload.xml

  1. Genera una singola chiave da 32 byte di utilizzo

dd if=/dev/random of=mySingleUsageAesKey bs=8 count=4

  1. Visualizza i 32 byte come sequenza esadecimale (64 caratteri)

xxd -c 32 -p mySingleUsageAesKey

  1. Cripta il tuo file Payload.zip con AES-256 passando la tua chiave esadecimale come opzione -K

openssl aes-256-ecb -nosalt -K HexaSequenceForMySingleUsageAesKey -in MyOrgGIIN_Payload.zip -out MyOrgGIIN_Payload

  1. Cifra la chiave AES con la chiave pubblica IRS RSA

openssl rsautl -encrypt -certin -inkey IRSpublickey.cer -in mySingleUsageAesKey -out 000000.00000.TA.840_Key

  1. Genera un timestamp con date "+%Y%m%d%H%M%S%2NZ"

  2. Crea file di metadati utilizzando questo timestamp dal sito IDES come MyOrgGIIN_Metadata.xml

  3. Comprimi i metadati, il carico utile crittografato e la chiave crittografata AES nell'archivio dei dati di trasmissione

zip TIMESTAMP_MyOrgGIIN.zip MyOrgGIIN_Metadata.xml MyOrgGIIN_Payload 000000.00000.TA.840_Key

Adesso invia e rispondi alla notifica degli errori.

    
risposta data 30.06.2015 - 11:31
fonte

Leggi altre domande sui tag