Thanks Roman.  Two follow-up comments in line.

Russ

> On May 19, 2021, at 5:59 PM, Roman Danyliw <[email protected]> wrote:
> 
> Hi Russ!
> 
> Inline ...
> 
>> -----Original Message-----
>> From: Russ Housley <[email protected]>
>> Sent: Wednesday, May 19, 2021 11:27 AM
>> To: Roman Danyliw <[email protected]>
>> Cc: IESG <[email protected]>; [email protected];
>> [email protected]; Ops Area WG <[email protected]>; George Michaelson
>> <[email protected]>
>> Subject: Re: Roman Danyliw's Discuss on draft-ietf-opsawg-finding-geofeeds-
>> 10: (with DISCUSS and COMMENT)
>> 
>> Roman:
>> 
>> Addressing some of your comments below.  I'm leaving others to my co-
>> authors.
>> 
>>> ----------------------------------------------------------------------
>>> DISCUSS:
>>> ----------------------------------------------------------------------
>>> 
>>> The validation process for the signature computed in Section 4 seems
>>> underspecified.
>>> 
>>> For example, let’s consider the example in Appendix A.  Through a whois
>> query
>>> for 192.0.2.0 one finds a “remarks:        Geofeed <https url>” field which
>>> leads to a geofeed file which had the detached CMS signature blob “#
>>> RPKI
>>> Signature: 192.0.2.0/24” depicted at the end of Appendix A.  What
>>> reference or text guides how to validate that signature in the RPKI
>>> (akin to the level of detail in Section 3.3 of RFC7909 or RFC6125)?
>>> 
>>> I’m inferring that the steps would roughly be:
>>> 
>>> ** Download the end-entity certificate identified by the
>>> subjectKeyIdentifier field via the pointer/URI in the
>>> “subjectInfoAccess”  field extracted from the CMS signature blob
>>> 
>>> ** Download the intermediate certificate identified by the
>>> authorityKeyIdentifier field via the pointer/URI in the “caIssuer”
>>> field extracted from the CMS signature blob
>>> 
>>> ** Based on the RIR identified in the whois query, download the RPKI
>>> trust anchor of the RIR
>>> 
>>> ** Validate the certificate chain from the RPKI trust anchor down to
>>> the end-entity certificate.  Check that all of the basicConstraints,
>>> certificatePolicies, etc. are accurate.  Check the CRL.
>>> 
>>> ** Verify that the end-entity certificate contains the IP address of
>>> interest
>>> (192.0.2.0) in the sbgp-ipAddrBlock field
>>> 
>>> ** Validate the signature using the algorithm identified in the CMS
>>> signature blog using the end-entity certificate
>>> 
>>> Is that the process?  Is that stated somewhere in the document or
>>> available via reference?
>> 
>> I suggest the following changes in Section 4:
>> 
>> OLD:
>> 
>>   Validation of the signing certificate needs to ensure that it is part
>>   of the current manifest and that the resources are covered by the
>>   RPKI certificate.
>> 
>>   As the signer specifies the covered RPKI resources relevant to the
>>   signature, the RPKI certificate covering the inetnum: object's
>>   address range is included in the [RFC5652] CMS SignedData
>>   certificates field.
>> 
>>   Identifying the private key associated with the certificate, and
>>   getting the department with the Hardware Security Module (HSM) to
>>   sign the CMS blob is left as an exercise for the implementor.  On the
>>   other hand, verifying the signature requires no complexity; the
>>   certificate, which can be validated in the public RPKI, has the
>>   needed public key.
>> 
>> NEW:
>> 
>>   As the signer specifies the covered RPKI resources relevant to the
>>   signature, the RPKI certificate covering the inetnum: object's
>>   address range is included in the [RFC5652] CMS SignedData
>>   certificates field.
>> 
>>   Identifying the private key associated with the certificate, and
>>   getting the department with the Hardware Security Module (HSM) to
>>   sign the CMS blob is left as an exercise for the implementor.  On the
>>   other hand, verifying the signature requires no complexity; the
>>   certificate, which can be validated in the public RPKI, has the
>>   needed public key.
>> 
>>   The trust anchors for the RIRs are expected to already be available
>>   to the party performing signature validation.  Validation of the CMS
>>   signature on the geofeed file involves:
>> 
>>   1.  Obtain the signer's certificate from an RPKI Repository.  The 
>> certificate
>>       SubjectKeyIdentifier extension [RFC5280] MUST match the
>>       SubjectKeyIdentifier in the CMS SignerInfo SignerIdentifier [RFC5652].
>>       If the key identifiers do not match, then validation MUST fail.
>> 
>>   2. Construct the certification path for the signer's certificate.  All of
>>       the needed certificates are expected to be readily available in the
>>       RPKI Repository.  The certification path MUST be valid according to
>>       the validation algorithm in [RFC5280] and the additional checks
>>       specified in [RFC3779] associated with the IP Address Delegation
>>       certificate extension and the Autonomous System Identifier Delegation
>>       certificate extension.  If certification path validation is 
>> unsuccessful, then
>>       validation MUST fail.
>> 
>>   3. Validate the CMS SignedData as specified in [RFC5652] using the
>>       public key from the validated signer's certificate.  If the signature
>>       validation is unsuccessful, then validation MUST fail.
>> 
>>   4. Verify that the IP Address Delegation certificate extension [RFC3779]
>>       covers the address range of the geofeed file.  If the address range is
>>       not covered, then validation MUST fail.
>> 
>>   If all of these steps MUST be successful to consider the geofeed file
>>   signature as valid.
> 
> Works for me.  Thanks for precisely stating the CMS field names which would 
> not have been recognizable from my above short hand notation.
> 
>>> 
>>> 
>>> ----------------------------------------------------------------------
>>> COMMENT:
>>> ----------------------------------------------------------------------
>>> 
>>> Thank you to Kyle Rose for the SECDIR review.
>>> 
>>> ** Section 3.  "It is only used to authenticate a pointer to the
>>> geofeed file and transport integrity of the data."
>>> 
>>> To separate the notion of the transport security provided with TLS and
>>> the object security provided by the RPKI signature, it might be cleaner to 
>>> say:
>>> 
>>> TLS and the web PKI authenticate the domain name in the URL and
>>> provides confidentiality and integrity for the geofeed file in transit.
>> 
>> The RPKI signature ought to be sufficient to consider the signature valid.  
>> The
>> WebPKI is providing authentication and integrity of the fetched data, but if 
>> any
>> of the data is modified at any point in the process, the RPKI signature will 
>> catch
>> it.
>> 
>>> ** Section 4.  Per “Borrowing detached signatures from [RFC5485] …”,
>>> I’m having trouble following which concept is being borrowed to
>>> elevate this to a normative reference.
>> 
>> With the changes to address your DISCUSS, this can probably be an
>> informational reference.
> 
> Agreed.
> 
>>> ** Section 4.  Per “the RPKI certificate covering the inetnum:
>>> object's address range is included in the [RFC5652] CMS SignedData
>>> certificates field”, can a more specific statement be made to say that
>>> it would be the sbgp-ipAddrBlock field in the certificate?
>> 
>> I think this is already explained in the definition of 'covers'.  Am I 
>> missing
>> something?
> 
> With the precision you provided in the response to the DISCUSS, I would have 
> rephrased my original comment to:
> 
> NEW
> ... the RPKI certificate covering the inetnum: object's address range is 
> included in the IP Address Delegation certificate extension [RFC3779] field.

I think this is resolved by the 4th item in the checking process.  That said, 
it would not be bad to highlight that earlier in the section.

> 
> 
>>> object's address range is included in the [RFC5652] CMS SignedData
>>> certificates field
> 
>>> ** Section 4.  Per the format of the signature appended to the geofeed file:
>>>      # RPKI Signature: 192.0.2.0/24
>>>      #
>> MIIGlwYJKoZIhvcNAQcCoIIGiDCCBoQCAQMxDTALBglghkgBZQMEAgEwDQYLKo
>> Z
>>>      #
>> IhvcNAQkQAS+gggSxMIIErTCCA5WgAwIBAgIUJ605QIPX8rW5m4Zwx3WyuW7h
>> Zu
>>>      ...
>>>      #
>> imwYkXpiMxw44EZqDjl36MiWsRDLdgoijBBcGbibwyAfGeR46k5raZCGvxG+4xa
>>>      # O8PDTxTfIYwAnBjRBKAqAZ7yX5xHfm58jUXsZJ7Ileq1S7G6Kk=
>>>      # End Signature: 192.0.2.0/24
>>> 
>>> -- Are the header “# RPKI Signature: 192.0.2.0/24” and footer “# End
>> Signature:
>>> 192.0.2.0/24” syntactically required?  If would seem so, but that’s
>>> never explicitly stated and can only be inferred via the example.  It
>>> would be helpful to explicitly clarify that.
>> 
>> Yes, they are required.  Randy, can you suggest a MUST statement?
> 
> I figured.  I'm thinking it just needs a sentence to say that.
> 
>>> ** Appendix A.
>>> 
>>> Section 4 says: “As the signer specifies the covered RPKI resources
>>> relevant to the signature, the RPKI certificate covering the inetnum: 
>>> object's
>> address
>>> range is included in the [RFC5652] CMS SignedData    certificates field.” I 
>>> was
>>> expecting the end-entity certificate to encode “192.0.2.0/24” in the
>>> sbgp-ipAddrBlock field.  The CA certificate has this IP block, but the
>>> end-entity certificate decodes the sbgp-ipAddBlock field to “IPv4:
>>> inherit
>>> IPv6: inherit”.  Is that expected -- to have both an ipv4 and ipv6
>>> annotation (since the previous certificate in the chain only mentioned
>>> IPv4), and not explicitly repeat the IPv4 value?
>> 
>> This will be done when the CA is issuing a subordinate certificate 
>> explicitly for
>> geofeed signing.  This is good key hygene to use a given key for only one
>> purpose.
> 
> There was a CMS structure subtlety that I didn't understand.  The CA cert 
> made no reference to v6, but the end-point one did.

Since the geofeed file in Appendix A only has an IPv4 address block, I should 
probably drop the IPv6:inherit.

Russ

_______________________________________________
OPSAWG mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/opsawg

Reply via email to