Both verifiers were honest, agreed with each other, and the signatures still failed
Forty signed records stopped verifying. Two independent verifiers said so. Neither of them was wrong, and neither of them could tell me why. The recipe both tools implement is sha256(public_key || header) . I checked it by hand against the code and against each other. Identical before the breakage and after. The inputs were byte-for-byte the same: a separate check confirmed that not one recorded…
Two independent verifiers confirmed that forty signed records failed to verify. Both verifiers agreed on the outcome, but neither could explain why. The verification process uses the sha256 algorithm on the public key and header fields. After checking the code and comparing the results, it was found that the key material had been altered.
A commit had replaced the public key and scheme fields in the key row, but the signatures were all created using the retired key material. The verifiers were using the currently declared key material, which caused them to report failures, as they should. However, the issue lies in the fact that the information about the retired material not being the current key material was not captured.
An append-only row was edited instead of being retired and superseded, making every artifact derived from it indistinguishable from a forgery. This mistake went unnoticed for a day, highlighting a failure in the verification process. The two verifiers, both using the same recipe and reading the same cell, did not catch the discrepancy because they were both blind to the changed field.
The repair involved adding a second key row under the same id, marked retired, and never used to sign anything new. This third value, "unfolded," indicates that no declared material fits the record. The solution was to add a field, "unfolded = n," to represent this third value and avoid reporting failures or passes. The verification process needs to read the fields it actually uses and provide a reason when it cannot verify anything.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.