I agree with Fred that we only need to specify "please somehow get a suitable 
64 bit number."  There are a couple of requirements that have to be met -- or 
at least considered:

1) Uniqueness: the number must be unique within the scope of the subnet.
2) Non traceability: the number should be different for different subnet, so 
hosts cannot be readily traced as they move to different locations.
3) Privacy: the number should vary over time, to make it harder for Internet 
services to correlate sessions started by the same host.
4) Stability: the number should remain stable over time, so administrators can 
more easily manage which host is using what network service.

Of course, stability and privacy are contradictory, so there must be a way for 
arbitraging that. That's the big issue to be dealt with by the specification of 
privacy addresses, i.e. whatever successor we write for RFC 3484. The 
arbitration will be resolving about how often host generate addresses, how many 
addresses they generate, and under what circumstances do they use one or the 
other. Let's assume for now that we just want to generate addresses once per 
subnet.

In principle, there are two ways to meet the unique per subnet requirement: use 
a number that is guaranteed to be unique by design; or use a large random 
number that is unlikely to collide with an existing allocation. The problem of 
course is that random numbers will sometime collide. It may be a low 
probability event, but it will eventually happen. In fact, even the "unique by 
design" numbers like EUI64 can collide occasionally, if some management error 
occurred. That's why we do DAD. So, we have another requirement in the address 
allocation:

5) Retry: host must be able to detect potential collisions and retry, i.e. 
generate a different random number.

Fernando's algorithm has several advantages. It uses a hash of a pre-allocated 
random number, and thus mitigates the issue of weak random number generators in 
some hosts. It incorporates the subnet prefix, and thus meets the 
"non-traceability" requirement. But Fernando's algorithm has no provision for 
"retry", and thus misses a key requirement. So, instead of Fernando's 
specification, I suggest that we define the algorithm's input as:

   RID = F(Prefix, Modified_EUI64,  Network_ID, secret_key, salt) 

Where prefix , Modified_EUI64, network ID and secret key are defined as per 
Fernando's proposal, and "salt" is a long integer, typically set to the number 
of retries used to generate the 64 bit ID.

Of course, if we can support retries, we can also support privacy addresses -- 
the private address can be generated with just a gratuitous retry, a modified 
salt. In fact, with that formulation, we can be very close to the format 
defined in SEND (RFC 3972) -- just replace the "secret key" by the public key 
of the host. So we have a chance of unifying CGA, privacy addresses, and stable 
random addresses.

-- Christian Huitema






 


--------------------------------------------------------------------
IETF IPv6 working group mailing list
[email protected]
Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
--------------------------------------------------------------------

Reply via email to