Descripción general de la firma de artefactos de Assured OSS

Assured Open Source Software te proporciona paquetes, metadatos de paquetes y secuencias de comandos de utilidad. Cada paquete de Assured OSS se firma con un certificado independiente emitido por Google que usa el algoritmo ECDSA P256 para la generación de claves. Cada paquete de metadatos y secuencia de comandos de utilidad también se firma con un solo certificado emitido por Google que usa el algoritmo ECDSA P256 para la generación de claves. Estos certificados se emiten con Certificate Authority Service y el certificado raíz público correspondiente se puede encontrar en un bucket de Cloud Storage.

Este documento se aplica al nivel gratuito. Para obtener información sobre las firmas en el nivel Premium, consulta Accede a los metadatos de seguridad y verifica los paquetes.

Descripción general de las firmas

Las firmas se almacenan en un archivo signature.zip. El archivo signature.zip contiene los siguientes archivos:

  • digest.txt: Este archivo almacena el algoritmo de hash junto con el resumen del paquete en un formato codificado en hexadecimal. Consulta el siguiente ejemplo:

    SHA-256:c5feab6f4de0878e94cf2a3074039b4f16a0c93a03501f047ee6eea29a8e33e0`.
    
  • signature.txt: Este archivo almacena el algoritmo de firma junto con la firma codificada en hexadecimal. Consulta el siguiente ejemplo:

    ECDSAP256_DER:30450220585d2a01f20de98dfe6cfab2c01a8f11787dbafbc6541304d23cc582e61be016022100f05a19f5ce473144579dfefc47905fd650584a1c7a31bd9d5bf93ecce739a7cb`
    
  • cert.pem: Este archivo almacena el certificado público.

  • certChain.pem: Este archivo almacena la cadena de certificados del certificado público.

Verificación de firmas

Puedes verificar las firmas con cualquiera de las siguientes opciones:

  • Herramienta aoss-verifier
  • manualmente
  • secuencia de comandos de verificación

Verifica firmas con la herramienta de aoss-verifier

  1. Para verificar la autenticidad y la integridad de los paquetes de software de código abierto, instala la herramienta aoss-verifier.

  2. Para verificar un paquete, pasa los valores LANGUAGE, PACKAGE_ID y VERSION, y el PATH_TO_DATA_FILE que deseas verificar con las marcas --language, --package_id, --version y --artifact_path.

    aoss-verifier verify-package \
       --language LANGUAGE \
       --package_id PACKAGE_ID \
       --version VERSION \
       --artifact_path ARTIFACT_PATH
    

    Reemplaza lo siguiente:

    • LANGUAGE: Es el idioma del paquete. El valor debe estar en minúsculas.
    • PACKAGE_ID: En Java, el formato es groupId:artifactId. En Python, el formato es packageName. El valor debe estar en minúsculas.
    • VERSION: Es la versión del paquete.
    • ARTIFACT_PATH: Es la ruta de acceso al archivo de datos en tu directorio local que deseas verificar. Usa las siguientes extensiones de nombre de archivo:
      • Extensión de archivo jar para un paquete de Java
      • Extensión de archivo whl para un paquete de Python

Cómo verificar firmas de forma manual

Para verificar las firmas de forma manual, haz lo siguiente:

  1. Instala Google Cloud CLI y el software OpenSSL, versión 3.0.1 o posterior.

  2. Verifica el resumen.

    1. Identifica el algoritmo de hash. El archivo digest.txt contiene el algoritmo de hash que se usa para calcular el resumen. Identifica el algoritmo de hash con el siguiente comando:

      cut -d ':' -f1 digest.txt
      

      Asegúrate de que el resultado sea SHA256.

    2. Calcula el resumen del archivo de datos. Puedes calcular el resumen del archivo de datos con varias herramientas de línea de comandos, según el algoritmo de hash que se use. En el caso de los archivos de datos y las secuencias de comandos de OSS asegurado, usa el algoritmo de hash SHA-256 para generar el resumen.

      En Linux, usa el siguiente comando para calcular el hash:

      sha256sum PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      

      Para la verificación del paquete, reemplaza PATH_TO_DATA_FILE por la ruta de acceso al paquete en tu directorio local.

      Para la verificación de metadatos, reemplaza PATH_TO_DATA_FILE por el nombre del archivo de metadatos. Por ejemplo, buildInfo.json, vexInfo.json o healthInfo.json.

      En macOS, usa el siguiente comando:

      shasum -a 256 PATH_TO_DATA_FILE | cut -d ' ' -f1 > datadigest.txt
      
    3. Extrae el hash del archivo digest.txt con el siguiente comando:

      cut -d ':' -f2 digest.txt > signaturedigest.txt
      
    4. Compara los dos resúmenes con el siguiente comando:

      diff datadigest.txt signaturedigest.txt
      

      Si no hay diferencias, no se generará ningún resultado.

  3. Verifica la firma

    1. Obtén una clave pública de cert.pem con el siguiente comando:

      openssl x509 -pubkey -noout -in cert.pem  > pubkey.pem
      
    2. Extrae la firma en formato binario con el siguiente comando (instala el comando xxd si no está presente):

      cut -d ':' -f2 signature.txt | xxd -r -p > sig.sig
      
    3. Extrae el resumen en formato binario con el siguiente comando:

      cut -d ':' -f2 digest.txt | xxd -r -p > digest.bin
      
    4. Verifica la firma con uno de los siguientes comandos:

      Opción 1

      openssl pkeyutl -in digest.bin -inkey pubkey.pem -pubin -verify -sigfile sig.sig
      

      El comando devuelve el siguiente resultado:

      Signature Verified Successfully

      Opción 2

      openssl dgst -sha256 -verify pubkey.pem -signature sig.sig PATH_TO_DATA_FILE
      

      Reemplaza PATH_TO_DATA_FILE por la ruta de acceso al archivo de datos en tu directorio local.

      El comando devuelve el siguiente resultado:

      Verified OK

  4. Verifica el certificado

    Para verificar el certificado, ejecuta el siguiente comando:

    openssl verify -verbose -CAfile ca.crt -untrusted certChain.pem cert.pem
    

    ca.cert es el certificado raíz que se puede descargar con este comando:

    curl -o PATH_TO_LOCAL_STORE https://privateca-content-6333d504-0000-2df7-afd6-30fd38154590.storage.googleapis.com/a2c725a592f1d586f1f8/ca.crt
    

    Si la operación se realiza correctamente, se mostrará el siguiente resultado:

    cert.pem: OK

Verifica firmas con una secuencia de comandos

Para usar una secuencia de comandos de verificación y verificar firmas, sigue estos pasos:

  1. Descarga la secuencia de comandos de verificación.

    1. Configura la autenticación con las credenciales predeterminadas de la aplicación (ADC).

    2. Descarga signatureverification.sh, README.md y signature.zip para la secuencia de comandos de verificación con el siguiente comando:

      gcloud storage cp "gs://cloud-aoss/utils/signature-verification/v1.0" PATH_TO_LOCAL_STORE --recursive
      

      Reemplaza PATH_TO_LOCAL_STORE por la ruta de acceso local en la que deseas descargar el archivo.

      También puedes realizar la verificación de la secuencia de comandos de utilidad con la secuencia de comandos de verificación.

  2. Ejecuta la secuencia de comandos siguiendo estos pasos:

    1. Instala Google Cloud CLI y el software OpenSSL, versión 3.0.1 o posterior.

    2. Autentícate con la cuenta de servicio que tiene permiso para acceder a Assured OSS.

    3. Otorga los permisos necesarios para ejecutar la secuencia de comandos con el siguiente comando:

      chmod +x signatureverification.sh
      
    4. Ejecuta la secuencia de comandos con el siguiente comando si no descargaste el archivo signature.zip:

      ./signatureverification.sh --data_file_path PATH_TO_DATA_FILE \
      --signature_url SIGNATURE_ZIP_URL \
      --root_cert_url ROOT_CERT_URL
      

      Reemplaza lo siguiente:

      • PATH_TO_DATA_FILE: Es la ruta de acceso al archivo de datos en tu directorio local que deseas verificar.
      • SIGNATURE_ZIP_URL: URL del archivo ZIP de la firma
      • ROOT_CERT_URL: Es la URL del certificado raíz público.

Resultado de muestra

El siguiente resultado indica que la secuencia de comandos de verificación se ejecutó correctamente.

Signature verification successful

Certificate verification successful

¿Qué sigue?