INNER CODE UNIT · Java

AttestationProtocol

GrapheneOS/AttestationServer · src/main/java/app/attestation/server/AttestationProtocol.java:42

class AttestationProtocol {
    private static final Logger logger = Logger.getLogger(AttestationProtocol.class.getName());

    static final int RANDOM_TOKEN_LENGTH = 32;
    private static final String SIGNATURE_ALGORITHM = "SHA256WithECDSA";
    private static final HashFunction FINGERPRINT_HASH_FUNCTION = Hashing.sha256();
    private static final int FINGERPRINT_LENGTH = FINGERPRINT_HASH_FUNCTION.bits() / 8;

    // Challenge message:
    //
    // byte maxVersion = PROTOCOL_VERSION
    // byte[] challenge index (length: RANDOM_TOKEN_LENGTH)
    // byte[] challenge (length: RANDOM_TOKEN_LENGTH)
    //
    // The challenge index is randomly generated by Auditor and used for all future challenge
    // messages from that Auditor. It's used on the Auditee as an index to choose the correct
    // persistent key to satisfy the Auditor, rather than only supporting pairing with one. In
    // theory, the Auditor could authenticate to the Auditee, but this app already provides a

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…