crypto/fips140: Documentation request for FIPS 140-3 approved algorithm parameters

Summary

The Go Cryptographic Module is in the process of obtaining FIPS 140-3 validation, and as part of this process, it’s essential to document the approved algorithm parameters. This documentation is crucial for organizations to verify that their applications use compliant algorithm configurations. The request is for a list of approved parameters for each algorithm, including key sizes and modes.

Root Cause

The root cause of this issue is the lack of clear documentation on the approved algorithm parameters for the Go Cryptographic Module. This lack of documentation makes it challenging for developers to ensure that their applications are using FIPS 140-3 compliant configurations. The causes of this issue include:

  • Insufficient documentation on approved algorithm parameters
  • Lack of transparency in the validation process
  • Incomplete information on supported key sizes and modes

Why This Happens in Real Systems

This issue occurs in real systems because:

  • FIPS 140-3 validation is a complex and time-consuming process
  • Documentation is often overlooked or incomplete
  • Compliance requirements can be stringent, and organizations need clear guidance to ensure they are meeting these requirements
  • Algorithm configurations can be complex, and without proper documentation, it’s easy to misconfigure them

Real-World Impact

The real-world impact of this issue includes:

  • Non-compliant applications that may not meet regulatory requirements
  • Security risks associated with using non-approved algorithm configurations
  • Delays in validation due to incomplete or inaccurate documentation
  • Increased costs associated with rework and revalidation

Example or Code (if necessary and relevant)

package main

import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "encoding/base64"
    "fmt"
)

func main() {
    key := make([]byte, 32) // 256-bit key
    rand.Read(key)

    block, err := aes.NewCipher(key)
    if err != nil {
        fmt.Println(err)
        return
    }

    // GCM mode
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        fmt.Println(err)
        return
    }

    plaintext := []byte("Hello, World!")
    ciphertext := gcm.Seal(nil, []byte{}, plaintext, nil)
    encoded := base64.StdEncoding.EncodeToString(ciphertext)
    fmt.Println(encoded)
}

How Senior Engineers Fix It

Senior engineers fix this issue by:

  • Reviewing the FIPS 140-3 standard and understanding the requirements for compliant algorithm configurations
  • Documenting approved algorithm parameters and making this information readily available to developers
  • Implementing automated testing to ensure that applications are using compliant configurations
  • Providing clear guidance on how to configure algorithms to meet compliance requirements

Why Juniors Miss It

Junior engineers may miss this issue because:

  • Lack of experience with FIPS 140-3 validation and compliance requirements
  • Insufficient knowledge of algorithm configurations and their impact on security
  • Overlooking documentation and assuming that approved parameters are clearly defined
  • Focusing on functionality rather than compliance and security requirements