If I may jump into the middle here... if, AFAICT, the purpose is to bind
a signature to a specific commit and no other, and also to the complete
file contents (figuring out $strings$ later), would it not be sufficient
to generate, say,
----- BEGIN PGP SIGNED MESSAGE -----
Comment: blah blah comments are untrusted
Repository revision: 1.5 /home/cvs/cvsroot/ifsf-sst/foo.c,v
#include <stdio.h>
int main()
{
printf("hello, world!\n");
return 0;
}
----- BEGIN PGP SIGNATURE -----
gobblegobblegobble=
----- END PGP SIGNATURE -----
(or its binary equivalent)
No, wait, if an attacker has root access to the CVS server, revision
numbers become untrusted. Really all you're trying to achieve is to
identify the real culprit, so that Eve can't frame Alice.
How about signing the previous signature?
----- BEGIN PGP SIGNED MESSAGE -----
Comment: blah blah comments are untrusted
Repository revision: 1.5 /home/cvs/cvsroot/ifsf-sst/foo.c,v
Chained signature:
ICAgaGVsbG93b3JsZHRoaXNpc3NvbWViYXNlNjRlbmNvZGVkMTdpc3RoZWZpcnN0dHJ1bHly
YW5kb21udW1iZXJkYXRhZnJvbWFsaWNlc2RldmVsb3BtZW50cGMK
#include <stdio.h>
int main()
{
printf("hello, world!\n");
return 0;
}
----- BEGIN PGP SIGNATURE -----
gobblegobblegobble=
----- END PGP SIGNATURE -----
(again, or its binary equivalent)
That way Alice's good-faith commit of a backdoor introduced by Eve will
show up Eve's later fudging of the repository to make it look as if Eve
(who has Bob's compromised key) committed good code and Alice added the
evil code. Okay, you can't necessarily prove that *Eve* did it, but
you'll be able to prove Alice's innocence when you need to.
Are the GPG folk listening in on this convo? Are there discussions on
sci.crypt or comp.software.config-mgmt that I can follow?