Re: [CGA-EXT] Public Key algorithm agility in CGAs

marcelo bagnulo braun <marcelo@it.uc3m.es> Wed, 17 December 2008 08:44 UTC

Return-Path: <cga-ext-bounces@ietf.org>
X-Original-To: cga-ext-archive@optimus.ietf.org
Delivered-To: ietfarch-cga-ext-archive@core3.amsl.com
Received: from [127.0.0.1] (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 723993A6A72; Wed, 17 Dec 2008 00:44:14 -0800 (PST)
X-Original-To: cga-ext@core3.amsl.com
Delivered-To: cga-ext@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id A087D3A6A72 for <cga-ext@core3.amsl.com>; Wed, 17 Dec 2008 00:44:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.85
X-Spam-Level:
X-Spam-Status: No, score=-3.85 tagged_above=-999 required=5 tests=[AWL=-0.088, BAYES_00=-2.599, RCVD_BAD_ID=2.837, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8gHua5BtLRKU for <cga-ext@core3.amsl.com>; Wed, 17 Dec 2008 00:44:11 -0800 (PST)
Received: from smtp03.uc3m.es (smtp03.uc3m.es [163.117.176.133]) by core3.amsl.com (Postfix) with ESMTP id 3C8C93A6831 for <cga-ext@ietf.org>; Wed, 17 Dec 2008 00:44:09 -0800 (PST)
Received: from marcelo-bagnulos-macbook-pro.local (235.pool85-53-141.dynamic.orange.es [85.53.141.235])by smtp03.uc3m.es (Postfix) with ESMTP id 99FAE6EC868; Wed, 17 Dec 2008 09:43:56 +0100 (CET)
Message-ID: <4948BBCB.6040300@it.uc3m.es>
Date: Wed, 17 Dec 2008 09:43:55 +0100
From: marcelo bagnulo braun <marcelo@it.uc3m.es>
User-Agent: Thunderbird 2.0.0.18 (Macintosh/20081105)
MIME-Version: 1.0
To: Tony Cheneau <tony.cheneau@it-sudparis.eu>
References: <4945533F.3090201@it.uc3m.es> <alpine.LNX.2.00.0812151440200.6417@whitebox> <49466C72.20105@it.uc3m.es> <alpine.LNX.2.00.0812162346510.9471@localhost.localdomain>
In-Reply-To: <alpine.LNX.2.00.0812162346510.9471@localhost.localdomain>
X-imss-version: 2.051
X-imss-result: Passed
X-imss-scanInfo: M:B L:E SM:2
X-imss-tmaseResult: TT:1 TS:-23.1220 TC:1F TRN:93 TV:5.5.1026(16344.005)
X-imss-scores: Clean:100.00000 C:0 M:0 S:0 R:0
X-imss-settings: Baseline:1 C:1 M:1 S:1 R:1 (0.0000 0.0000)
Cc: "Vanderveen, Michaela" <mvanderv@qualcomm.com>, cga-ext@ietf.org, Maryline Maknavicius <maryline.maknavicius@it-sudparis.eu>
Subject: Re: [CGA-EXT] Public Key algorithm agility in CGAs
X-BeenThere: cga-ext@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: CGA and SeND Extensions <cga-ext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/cga-ext>, <mailto:cga-ext-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/pipermail/cga-ext>
List-Post: <mailto:cga-ext@ietf.org>
List-Help: <mailto:cga-ext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cga-ext>, <mailto:cga-ext-request@ietf.org?subject=subscribe>
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"
Sender: cga-ext-bounces@ietf.org
Errors-To: cga-ext-bounces@ietf.org

Tony Cheneau escribió:
>
>
>
>
>>>  We also defined a way for the node to support multiple Public Keys 
>>> as a
>>>  transition mechanism.
>>>  For this, we use the CGA PDS extension field and define (in a separate
>>>  draft) the structure of the extension. It basically looks like this:
>>>
>>>      0                   1                   2                   3
>>>      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
>>>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> |          Extension Type        |      Extension Length         |
>>>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> | | ~                        Public Key                              ~
>>> | |
>>>     +                               +-+-+-+- - - - - - - - -+-+-+-+-+
>>> | |           Padding              |
>>>     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>>
>> mmm, maybe it would be better to define a generic public key 
>> extnesion and define subtypes for the different algorithms?
>> seems cleaner to me
> The Public Key would be recognize by the Algorithm Identifier as the PK
> is a DER encoded ASN.1 structure of the type SubjectPublicKeyInfo. I
> don't think we might need another kind of identifier.
>
right

>> right.. have you made some numbers about how many public keys can you 
>> include in a normal ND messgae? that should be included in the draft, 
>> to have a clear picture about this (it is not the same if we can 
>> include 1 and a half keys than if we can include 10 keys...)
> We don't have any theoretical number yet. We sure will have to evaluate
> this.
>
> We still can approximate, I have a capture of a node configured
> to use a 1024-bit RSA PK. Starting from the IP layer, the packet weight
> 440 bytes. The CGA option is 192 bytes long and the RSA signature option
> is 152 bytes long. These two sizes are of course depending of the size
> of the RSA key.
> As a remainder, IPv6 requires MTU to be at least 1280 bytes.
> A 512 bits ECC PK should be at least 64 bytes long (without any
> encoding). So maybe a 512 bits ECDSA PK in the CGA PDS will add
> something like 80 bytes. Doing little math, we may be able to fit no
> more than ten 512-bits Public Key + one 1024-bit RSA PK in a normal
> Neighbor Solicitation message.
> A 512-bits long ECDSA key is equivalent to 15360-bits long RSA key.
>
seems good to me

> When using multiple signature (for routers, if we allow it), it might
> raise the size of the packet over the MTU size (if we have a lot of
> Public Keys). No a real problem here, as we may choose to send multiple
> Router Advertisements message instead of one.
>
well, i guess that the normal scenario would not be 10 keys...

> I don't know if when are up to do packet fragmentation in order to
> support more Public Keys or if there is even a need for that.
>
couldn't parse this one....

>> well, it seems that in order to support crypto agility we will need 
>> some shanges in send.
>> whether these particular set of changes is the right one, it is up 
>> for disucssion, but updating rfc3971 is clearly needed imho
> OK, we will propose changes and see if they reach a consensus.
>
ok, i understand that you will include an high level overview of these 
changes in the draft you are writing?

>
>>>  If not, we can as well use the Key Hash to determine which Public 
>>> Key in
>>>  the
>>>  CGA PDS was used to perform the Digital Signature, but we think it is
>>>  neither
>>>  really optimal (as the node may have to compute a lot of extra 
>>> hashs) nor
>>>  elegant.
>>>
>>> >  The main issue here is that we need a mechanism to deal with the 
>>> case >  that different nodes support different algorithms.
>>>  We address this problem by introducing a new SEND option named
>>>  "Supported Signature Algorithm Option" (name it itself being clear):
>>>
>>>    0                   1                   2                   3
>>>    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
>>>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> |      Type      |    Length     |R| Nr. supp. Algos | Reserved  |
>>>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> |  Sig. Alg. 1   | Sig. Alg. 2   |  Sig. Alg 3.  | Sig. Alg 4.   |
>>>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> ~ ~ |                           ...                                  |
>>> ~ ~
>>>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>> |      ...      | Sig. Alg. N  |
>>>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>>>
>>>  This option contains signature algorithm that are supported by a node.
>>>  The receiver can determine which Signature Algorithm is more suited 
>>> for
>>>  the emitter.
>> what does supported means?
>> does it means that it can validate using this suite or does it means 
>> that it has CGA and or a cert that it uses this suite?
>> these are different things and i think we need both?
> We need both to perform negotiation process.
well, it depends how you define the nogotiation process, right?

>
>>>  The 'R' flag (generally set by the message sent by the nodes that
>>>  respond to the initial request) helps to diagnosis when a resent of 
>>> the
>>>  message is needed:
>>>
>>>  It helps in this case:
>>>  Node A                                      Node B
>>>
>>>  NS
>>>  {CGA option,
>>>  RSA Signature option. Supported-Signature-Algo option
>>>         (RSA, ECC, R=0)} -------->
>>>                                     NA
>>>                                     {CGA option,
>>>                                     ECC Signature option
>>>                                     Supported-Signature-Algo option
>>>                         <--------       (ECC, R=1)}
>>>  NA
>>>  {CGA option,
>>>  ECC Signature option. Supported-Signature-Algo option
>>>  (RSA, ECC, R=0)}        -------->
>>>
>>>  IPv6 traffic            <------->  IPv6 traffic
>>>
>>>
>> right, but the problem is that RADV are also sent unsolicited... so 
>> how you propose to deal with this situation?
>> one option would be that if a node receives a RADV with signed with a 
>> non supported suite it can then send a RSOL asking for the right 
>> suite, but that would imply to be able to differnetiate the fact that 
>> a node can validate with a suite and that a node has the CGA and the 
>> cert with a given suite i think
> That is almost the way we plan to do it (sending a RSOL to ask the right
> suite).
>


>>>
>>> >  Note that today, CGAs are used by SEND, MIPv6 and SHIM6 and they 
>>> all >  assume that the key is RSA
>>> >  I understand that in the case that a different 
>>> AlgorithmIdentifier is >  included in the Public Key field of the 
>>> CGA PDS, the receiving peer will >  fail the verification. Since the 
>>> key is bound to the address, the sender >  will need to retry, but 
>>> using a different public key, hence using a >  different address. It 
>>> seems that what may be needed then is an error >  message in these 
>>> protocols. The potential problem of such error message >  is that it 
>>> could open the door for downgrading attacks.
>>>  I'm not sure an error message could cause any harms.
>>>  If we request the error message to be signed and secured with SEND
>>>  option.
>>>  For example:
>>>  After a request from a node A, the node B send its reply. In the
>>>  meantime, the attacker send a fake error message supposed to come from
>>>  node B. - case 1: node A can check the signature on B's message, it 
>>> won't
>>>  fall
>>>    for it. - case 2: node A can't check B's signature, it won't 
>>> trust be,
>>>  the error
>>>    message won't help the attacker since it won't be trusted either
>>>
>>>  In any cases, if the attacker is in position to drop any of B's 
>>> packet,
>>>  the error message won't help the attacker to become more powerful.
>>>
>> mmm, but the point is that if the attacker can drop ONE packet and 
>> fake the error message, it would render send inactive between the 
>> nodes for as long as the information is stored in the cache (Which 
>> can be a long time if the nodes talk to each other frequently)
> Maybe a node shouldn't store/update a cache when it can't talk to a 
> node. Does it serve a purpose ?
>
but in this case it was able to talk to him and he obtained a reply that 
contains the error message
So, i guess that you are suggesting is that we don't cache the error 
message when it is not secured...
I guess we need to check how send works when dealing with plain ND 
messages, I understand that SEND always rewrites plain ND, but i don't 
rememebr how this works when ND has a cached data....

>> So, this would imply that dropping one packet and generating an error 
>> message (which is unprotected) would deactivate send between two 
>> nodes... right?
> The error message should be protected (so a third party can check the
> message during forensic).
how?
the whole point of the error message it to handle the case that there is 
no common crypto suite between the two communicating nodes
So, by definition, the receiver cannot validate the error message
> Note that the message could be understood by
> the node. If the error message only state something like "you are using
> too short keys", it wouldn't prevent the receiver to verify the message.
>
right, in this case i agree
but this opens the door to downgrading attacks though
I mean, would the error would sign by the long key or the short key?

>>>  This is to my mind a really important feature. Consider the following
>>>  example:
>>>  a router is in a heterogeneous network were nodes are using ECC or RSA
>>>  (not
>>>  both at the same time). If we don't allow multiple signatures, the 
>>> router
>>>  will
>>>  have to send 2 messages so all node can be aware of the same 
>>> information.
>>>  If
>>>  we allow multiple signature, we have only one message. Allowing 
>>> multiple
>>>  signatures for routers will reduce the overhead. However, our 
>>> analysis is
>>>  that for host, multiple signature shouldn't be used.
>>>  Host will more likely resend a message with another Signature 
>>> Option when
>>>  need.
>>
>> one issue here is do you think that we also need router with multiple 
>> certificates? i.e. certs with different crypto suites?
> We are not sure anymore about how feasible would be this specific point.
>

me neither
>>>  We think the choice should be made on deployment. An administrator may
>>>  have full control on the network, choosing one Signature Algorithm on
>>>  the same network (PK only contained in CGA PDS Public Key field). 
>>> On the
>>>  other side, administrator may not have any control and faces host 
>>> with a
>>>  lot of different type of Signature Algorithm (routers will have to
>>>  support multiple Signature Algorithms, controlled host will have to 
>>> use
>>>  multiple-key CGA). The modification of the protocol we propose 
>>> should be
>>>  fitted for these usages.
>>>
>> right,
>> but the porblem if you allow both is that we need to figure out how 
>> the different combinations interact
> Right, this is why negotiation has to be robust.
>
>>>  We also plan to introduce an optional Router-as-a-notary function, 
>>> that
>>>  helps nodes that don't have any common Signature Algorithm to securely
>>>  communicate NDP informations together. Basically: when a node doesn't
>>>  understand the signature of a message, it will forward the packet to a
>>>  router (that will be trusted for this role via its certificate), that
>>>  have more processing capabilities (and functionalities) and that will
>>>  check the signature on the nodes behalf. Once the signature has been
>>>  checked, the status is transfered to the node. This may induce
>>>  specification of two new ICMP messages.
>>>  This is useful for scenario with really lightweight nodes (that can 
>>> only
>>>  support on type of specific Signature Algorithm) mixing with normal 
>>> nodes.
>>>
>> i like this, cool
>> would this be related to the proxy send work?
> No, I don't think it will, this is just too different. We are just
> introducing two new ICMP messages. First one is used to forward
> (securely) to a trusted router a copy of the packets it can't verify by
> itself. The second one is the response from the router which indicate
> the status of the previous message (signature was good/bad).
>

ok, will look into that once you have the draft

Regards, marcelo

> Regards,
>     Tony Cheneau
>

_______________________________________________
CGA-EXT mailing list
CGA-EXT@ietf.org
https://www.ietf.org/mailman/listinfo/cga-ext