I located the cause:
../../src/gen-note-integrity.sh: line 78: cmp: command not found
I located the cause:
../../src/gen-note-integrity.sh: line 78: cmp: command not found
That only seems to work in some configurations: https://gitlab.com/redhat-crypto/libgcrypt/libgcrypt-mirror/-/pipelines/472626834
I pushed the change: rCa340e9803882: fips: More portable integrity check.
It uses .note.fdo.integrity section, not loaded onto memory.
It simplifies the logic, and switches to dladdr (from dladdr1).
Pushed the change which fixes the build with ld.gold.
rC9dcf9305962b: fips: Integrity check improvement, with only loadable segments.
Thank you for your suggestions, @werner.
I agree that we should not put much effort to develop our own methodology here; Too much effort may introduce possibility of unmaintainable code, which should be avoided for the particular purpose of "integrity".
Folks, you are opening a can of worms. The only secure why to sign a file is to have a detached signature. That is often non-practical and thus putting the signature/MAC at one certain position and exempt just this one position from hashing is the next best alternative. Any more complicated rules will inevitably introduce security flaws. If a binary is stripped, it is a different binary than a non-stripped one, if it is linked with another linker, it is a different one. And that binary will even be able to figure this out and change behavior. Please keep it simple.
Thanks! Maybe it would be simpler to use dl_iterate_phdr(3) for this. I wasn't aware of the function, but a colleague just implemented a proof-of-concept of what you're proposing in https://gitlab.com/dueno/integrity-notes.
I am going to apply https://gitlab.com/redhat-crypto/libgcrypt/libgcrypt-mirror/-/commit/64ccc25c4b4a2c8c4e13e7e37ff1c8c60a3d8401
And consider adding the code to limit hashing content (from start of the file to end of data section).
it will be but we first prefer to do some final tests with that version. Feel free to also test. Either this or the next micro version will eventually be announced.
Hi there, is this the new stable version of libgcrypt? Apologies if this is the wrong place to ask; I just couldn’t find any other release announcement for 1.10.0.
For the record, there is a new report on the mailing list about this module on MacOS:
Thank you, applied both of two patches.
Thanks. Looks good to me.
Test cases are recovered in rC535a4d345872: fips: Recover test cases for selftest, add skipping in FIPS mode..
Sorry, it's my misunderstanding.
_gcry_fips_run_selftest can be run by GCRYCTL_SELFTEST.
I was confused by the function name. Perhaps, it is good to change the name of function to _gcry_run_selftest.
@werner Those removed tests are selftests which are only invoked by FIPS mode for its requirement of selftests.
AFAICS, the last commit removes some tests. We should never remove a test just because FIPS does not allow it. The old tests need to be run in non-fips mode.
Pushed the change in rC76aad97dd312: fips: Reject shorter key for HMAC in FIPS mode..
And we need to fix selftest for shorter keys.
@pmgdeb : IIUC, what we need is:
diff --git a/cipher/md.c b/cipher/md.c index 34336b5c..4f4fc9bf 100644 --- a/cipher/md.c +++ b/cipher/md.c @@ -903,6 +903,9 @@ prepare_macpads (gcry_md_hd_t a, const unsigned char *key, size_t keylen) { GcryDigestEntry *r;
In T5512#153650, @Jakuje wrote:This is my draft for the FIPS indicator KDF. I think we do not need to keep the original GCRYCTL_FIPS_SERVICE_INDICATOR if we replace it also in the tests. This will also need some tests and documentation update.
libgcrypt-fips-indicator-kdf.patch3 KBDownload
I'm not completely sure but it might be convenient to mark HMAC keys with lengths less that 112 as non-approved in FIPS mode for both generation and verification. It could be easily implemented by adding a check using cipher/mac-hmac.c:hmac_get_keylen() or at the algo level. What do you think?
Thank you, applied.
Also, add another change.
I went through the documentation related to FIPS and updated some wording to match reality. It will probably require still some more work.
This is my draft for the FIPS indicator KDF. I think we do not need to keep the original GCRYCTL_FIPS_SERVICE_INDICATOR if we replace it also in the tests. This will also need some tests and documentation update.
Yes, we should introduce an INDICATOR_KDF thing.
Thank you.
Applied.
Patch applied, doc updated.
No change of FSM diagram.
The previous comment should have come to the T5600. Sorry for the noise.
Sorry for resurrecting the done task, but I got a message from @pmgdeb who noticed there is mismatch between parenthesis in the --with-fips-module-version help string. The attached patch fixes the issue and add proper help text.
Sorry for resurrecting the done task, but I got a message from @pmgdeb who noticed there is mismatch between parenthesis in the --with-fips-module-version help string. The attached patch fixes the issue and add proper help text.
Thanks. Looks good to me (both merged changes and the above proposal). In addition to the changes proposed above, we certainly need to update the documentation about this, probably also the FSM diagram.
And I'm testing following:
The "at first" change done.
At first, I think that we need to change the way how libgcrypt rejects non-approved cipher/md/mac/pk.
FWIW, We have a similar mechanism for the secure memory
We talked today about the renaming the current "linux" entropy module to "oldlinux" would make sense.
Thank you for comments on random/rndlinux.c.
Thank you for your quick testing.
Thank you. Tested locally that it does what it is supposed to do and all tests passed for me as expected.
Reading through the changes, the content and usage of the getentropy looks good.
Here is the change remained:
diff --git a/src/fips.c b/src/fips.c index bcadc5f2..5499aee8 100644 --- a/src/fips.c +++ b/src/fips.c @@ -82,6 +82,12 @@ static void fips_new_state (enum module_states new_state);
Before rebasing, I pushed a change to simplify access to no_secure_memory variable by rC209d98dcf66b: Simplify the logic for no_secure_memory..
Thank you, applied.
It turned out that the new *.inp files are not part of the release tarball, which makes the tests from generated tarball fail. The attached patch should fix this issue.
Thank you, applied.
Sorry for the noise. There were couple of other places which I missed initially and which are covered in the v2 patch which follows: