Cómo preparar archivos de transmisión de datos FATCA con herramientas de código abierto [cerrado]

1

Aquí está el contexto: para transmitir datos FATCA al servicio IRS de EE. UU. el protocolo IDES define los siguientes pasos

  1. firme el archivo XML Payload.xml con la firma envolvente, SHA-256 con clave privada RSA, como Payload-signed.xml .
  2. empacar el archivo XML Payload-signed.xml firmado en un archivo zip Payload.zip
  3. genere una clave de 32 bytes de uso único para AES-256
  4. cifre el archivo Zip Payload.zip con AES-256 como Payload
  5. cifre la clave pública AES con RSA para el intercambio como Key
  6. agrupar la clave AES encriptada Key y el archivo zip encriptado Payload en un archivo Zip

¿Cómo implementar este proceso con las herramientas de código abierto existentes (con preferencia por la plataforma Linux)?

Comentario: este proyecto demuestra cómo hacerlo con .Net

    
pregunta Yves Martin 30.06.2015 - 10:50
fuente

1 respuesta

2

Este es el proceso que he diseñado con las herramientas de Linux disponibles. Cuide todos los nombres de archivos (distingue entre mayúsculas y minúsculas) y reemplace MyOrgGIIN con el identificador GIIN de su organización.

  1. Existe un alto riesgo de que aparezcan comillas y comas en su archivo FATCA XML. Borre estos caracteres del archivo XML a evite fallas en el envío (y algunos otros como hash y doble guión, lea este PDF para obtener más información).

  2. Incluya su estructura ftc:FATCA_OECD XML en una plantilla de firma envolvente que especifique los métodos de cifrado y hash esperados ( 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. Generar firma XML en la plantilla preparada con xmlsec1 , llenará los nodos vacíos:

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

  1. Comprimir carga útil XML firmada como archivo zip

zip MyOrgGIIN_Payload.zip MyOrgGIIN_Payload.xml

  1. Generar una clave de uso de 32 bytes

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

  1. Muestra los 32 bytes como secuencia hexadecimal (64 caracteres)

xxd -c 32 -p mySingleUsageAesKey

  1. Cifre su archivo Payload.zip con AES-256 pasando su clave hexadecimal como opción -K

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

  1. Cifre la clave AES con la clave pública RSA del IRS

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

  1. Genera una marca de tiempo con date "+%Y%m%d%H%M%S%2NZ"

  2. Cree un archivo de metadatos usando esta marca de tiempo del sitio IDES como MyOrgGIIN_Metadata.xml

  3. Empaque sus metadatos, carga útil cifrada y clave AES cifrada en el archivo de datos de transmisión

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

Ahora envíe y reaccione a la notificación de errores.

    
respondido por el Yves Martin 30.06.2015 - 11:31
fuente

Lea otras preguntas en las etiquetas