- From: Magnus Nyström <magnus@rsa.com>
- Date: Fri, 6 Feb 2009 14:03:43 +0100 (W. Europe Standard Time)
- To: public-xmlsec@w3.org
This is in response to ACTION-200 that I got during this week's call, to show the differences in the two proposals we have for how to express EC public keys and curves. I'd like to start by pointing out that this is not primarily about expertise in ECC but rather about alternatives in designing XML schema that supports ECC. So no deep ECC expertise required to weigh in here... Essentially, what is to be expressed in XML schema is an ECC public key as well as the curve the key belongs to. The current design is: <complexType name="ECKeyValueType"> <sequence> <choice> <element name="ECParameters" type="dsig11:ECParametersType"/> <element name="NamedCurve" type="dsig11:NamedCurveType"/> </choice> <element name="PublicKey" type="dsig11:ECPointType"/> </sequence> </complexType> My proposed alternative design is: <complexType name="ECKeyValueType"> <sequence> <element ref="dsig11:ECDomain"/> <element name="PublicKey" type="dsig11:ECPointType"/> </sequence> </complexType> <element name="ECDomain" type="dsig11:ECDomainType"/> <complexType name="ECDomainType"> <sequence> <choice> <element name="SpecifiedDomain" type="ECParametersType"/> <element name="NamedCurve" type="dsig11:NamedCurveType"/> </choice> </sequence> </complexType> I.e. in a sample instance using the <NamedCurve> alternative, one would in the current design have (namespaces omitted, and I am also not sure if this is the right way to express OIDs as URIs, but that's besides the [current] point): <ECKeyValue> <NamedCurve>oid://1.2.840.10045.3.1.7</NamedCurve> <PublicKey> ... </PublicKey> </ECKeyValue> and in the alternative proposal: <ECKeyValue> <ECDomain> <NamedCurve>oid://1.2.840.10045.3.1.7</NamedCurve> </ECDomain <PublicKey> ... </PublicKey> </ECKeyValue> The reason for the alternative design is as outlined in http://lists.w3.org/Archives/Public/public-xmlsec/2009Jan/0068.html : - Reusability. By having a separate type for ECDomain, it will be possible describe EC curves in situations which do not directly include or require presence of an EC public key. I think it would be good to acknowledge that we may not know about such situations at this time, but by introducing such a type we will at least allow for them. The current design does not. - Extensibility. By having a separate type it will be easier to leverage type substitution in case a third (like "implicitCA") or other alternative for describing EC curves arises. This would then not require changes to the ECKeyValue type, again something the current design does. - Modularity (and consistent content model). By having an explicit EC domain parameters type as proposed, the design becomes more modular. Nowhere else (AFAICT) in XMLDsig or XMLEnc is the method of having a complex type containing a choice between two elements of complex type in addition to other elements used. Instead, XMLDsig and XMLEnc quite consistently use the approach of defining "sub-types" even when there is only one usage of those "sub-types" in element definitions. As for an example of reuse - something I was also asked to provide - consider a situation where two parties engage in a Elliptic-Curve Diffie-Hellman handshake. They would then first agree on the curve to use after which they will exchange public keys. If curve definition had its own type as in the alternative proposal then XML protocol designers could just reuse the ECDomainType type from XMLDsig/XMLEnc. If not, they would have to define their own.(*) -- Magnus -- (*) Actually, this example also suggests that an optimization can (or should, even) be done to both proposals, namely to have the choice as optional, i.e.: <complexType name="ECKeyValueType"> <sequence> <choice minOccurs="0"> <element name="ECParameters" type="dsig11:ECParametersType"/> <element name="NamedCurve" type="dsig11:NamedCurveType"/> </choice> <element name="PublicKey" type="dsig11:ECPointType"/> </sequence> </complexType> or in the alternative design: <complexType name="ECKeyValueType"> <sequence> <element ref="dsig11:ECDomain" minOccurs="0"/> <element name="PublicKey" type="dsig11:ECPointType"/> </sequence> </complexType> This would be for the case when the EC domain/curve is known by other means and would also save space in those cases. --
Received on Friday, 6 February 2009 13:04:51 UTC