PKINIT encoder/decoder issues
Kevin Coffman
kwc at umich.edu
Wed Oct 8 09:51:01 EDT 2008
On Tue, Oct 7, 2008 at 9:59 PM, Ken Raeburn <raeburn at mit.edu> wrote:
> I'm doing a bit of work on the ASN.1 encoder routines in the MIT
> Kerberos library, and in preparation for that am trying to make sure
> that more of the encoders and decoders are actually tested under "make
> check". The mechanism we have for other (base protocol) types tested
> in src/tests/asn.1 is pretty straightforward:
>
> * We create a sample data structure, encode it, and compare the result
> (in hex) against saved copies.
>
> * We create a sample data structure, encode it, and feed the result
> through a little ASN.1 pretty-printer, and compare the result against
> saved copies.
>
> * We take a string with a sequence of hex values (stored separately
> from the above -- that's probably a bug), convert it to binary, feed
> it to the decoder to get a data structure, create our sample data
> structure, and recursively compare the two.
>
> These tests check for self-consistency and that our encodings don't
> change. Checking whether the expected and actual results are
> *correct* is a separate matter, obviously.
>
> Extra tests are sometimes run for sequences with optional fields, or
> cases where we want to support some non-distinguished encoding variants.
>
> There are currently no tests for the PKINIT types; I've been working
> on writing some. However, I see a few possible problems:
>
> In krb5_pk_authenticator_draft9, kdcRealm is set in the client-side
> plugin code but never used in the encoder or decoder. (So obviously
> initializing and comparing the field doesn't work.) It's a reference
> to the realm data stored in the kdcName field, and looks to me like it
> could just go away.
Yes. I think there was some confusion. The kdcRealm field is
redundant and unused.
> In krb5_pa_pk_as_req_draft9, we encode the optional field
> encryptionCert with a tag of 3, but when decoding, it looks like we
> want it to be 2, duplicating the tag on kdcCert.
>
> In the trusted_ca encoding, with the principalName choice, the decoder
> is complaining about an incorrect tag value; I think it may be out of
> sync.
According to the draft9 definition of PA-PK-AS-REQ, kdcCert should be
tag 2 and encryptionCert should be tag 3. My initial reaction is that
this is a typo/bug in asn1_decode_pa_pk_as_req_draft9().
Unfortunately, I can't easily recreate the test environment to verify
that.
> The ANY DEFINED BY seems to confuse our pretty-printer. I'm not sure
> what to do about that except skip those tests when pretty-printing.
> Is there something we can stuff in that field that won't confuse it
> too much?
We used dumpasn1 (http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c) to
look at ASN.1 structure. Maybe there is something in that code that
would help the pretty-printer?
> Could someone more knowledgeable than I about the ASN.1 encodings and
> the innards of PKINIT please take a look at this? I can make my
> preliminary test cases available if it would help.
>
> Ken
More information about the krbdev
mailing list