- From: Jim Schaad <ietf@augustcellars.com>
- Date: Thu, 18 Apr 2013 09:30:43 -0700
- To: <public-webcrypto-comments@w3c.org>
- Message-ID: <046101ce3c52$13213010$39639030$@augustcellars.com>
The following represents a series of random comments that are triggered by having read the most recent (27 Jan 2013) W3C Editor's draft of the Web Cryptography API document. 1. I am having a problem understanding the target audience of this document in terms of the expected experience level and cryptographic savvy of a reader and user of this API document. There are many time where the process of going from A to B seems to be either overly complicated (can't use a key object as the public key value in a key agree) or overly simplified (no real difference between mac and sign). In order to correctly gauge the level of comments it would be helpful if there was a section on target audience for the document that covered a level of sophistication and background that is expected for users of this specification. I guess part of the question is - does this document focus on the developer who should be able to do something crypto in an afternoon? Or does it address people like me - I need to be able to do just about anything because I am doing all sorts of prototyping of new cryptographic algorithms, techniques and protocols. 2. In section 2.1 - there is almost nothing in this use case that I recognized as being multi-factor authentication. The only thing that comes close would be the addition of cryptographic channeling binding from the TLS session as part of the authentication process. I would strongly suggest either actually giving cases of multi-factor authentication or changing the section title to something like "Multiple authentication methods" 3. In section5.2 the last paragraph, I don't understand how the final clause in the sentence is supposed to make sense. The use of existing cryptographic messaging protocols does not preclude the signing of arbitrary messages. The messages may still be arbitrary just formatted in a well-known formation. 4. Section 5 - I am wondering if there is something that should be put into this section about positive cleanup/care that needs to be dealt with in the situation of a public workstation as oppose to a user's machine. Leaving keys around that can possibly be used by others is always a bad idea. 5. Section 10 - Issue-28 - This is not a comment about the question of permitting short-names. I will however note that the proposal of allowing for parameter values to be set as constants with a short name corresponds to the path that the JOSE working group has currently taken. Thus RSA-PSS-SHA1 would map to {'name':'rsa-pss', 'params': { 'hash': {'name':'sha1'}, 'mgf':{'name':'mgf1'}, 'saltLength':20}} 6. Section 10 - One of the things that I have found very useful in both Microsoft CAPI and Microsoft CNG is the fact that there are some constants that are published as part of the interface so that one can get information about an algorithm. Examples would be the key sizes of an algorithm, the size of an IV to be generated, what things are fixed based on the algorithm chosen (i.e. RSA-with-SHA1 means a specific hash algorithm) 7. Section 11.2 - The description of algorithm appears to me to be incorrect. Is this supposed to be the algorithm that was used to generate the key or the algorithm associated with the key? An example of the difference would be the difference between AES, AES-KeyWrap (and maybe AES-CBC). You can use AES-KeyWrap to unwrap a key - the current text implies that this means the algorithm would be set to AES-KeyWrap rather than either AES or "binary secret" 8. Section 11.3 - There is an implication of step 4 that I would like to tease out. If you are cloning a key, does that mean that the tainting that was discussed previously would occur on both key objects? Similarly would a "in use" flag in the key be set for both keys at the same time? 9. Section 12.1 - Is the requirement on the queue being a FIFO queue prescriptive or descriptive? I know of algorithms such as CTR mode and tree hash functions where this is not a hard requirement on the algorithm implementation. 10. Section 12.1 - Do you want to start with an internal state check as the first step in the algorithm? 11. Section 12.1 - Step #3 (update result) I would not have necessarily thought of this as an accumulation operation without the following Editorial note. I would suggest that this fact be explicitly stated in the description of the step 12. Section 12.3 - result says that for an error then the result must be NULL - does that need to be added to the algorithm in section 12.1? 13. Section 12.4.2 - The finish method states that the cryptographic operation is to be done async, however step 4 would appear to be a sync event. Should this processing (firing the oncomplete event) be moved to section 12.1? 14. Section 12.4.3 - Should this function do anything for any currently existing notifications? 15. Section 12 - Should the internal state be visible to the external world? There are currently some interesting conditions that can occur - For example one can cue an onprogress notification, immediately follow it with either an abort or a processing error which clears the result and then process the onprocess notification - there is no result and no indication of why this would be true. 16. Section 15 - What can I say - I really dislike the first four functions in the SubtleCrypto interface. I would far prefer that these function names did not carry any cryptographic connotations unless they are going to have some type of restriction to those connotations. I do not believe and have needed over the years to correct any number of misconceptions dealing with the difference between sign and mac. Using names such as transform/untransform and compute/verify would make me much happier. However I would appreciate even something as small as changing the function sign to mac. Since everybody keeps telling me that they are close enough to the same then there should not be any real pushback on such as small change.. 17. Section 15.2.1 - I am unclear why step #4 specifies that the process and finish calls are to be done via a queued task rather than simply directly calling the functions here. Given that process and finish are async operations these would not be blocking. Note that this fact is completely against the first line in the Editorial note that follows which suggests that these operations should be synchronous rather than asynchronous. 18. Section 15.2.6 - Steps 4 and 5 should be reversed. One needs to do the queue before doing the return. 19. Section 15.2.6 - I don't think that you are currently publishing a result for KeyOperation Thus step 5.5 would appear to be incorrect. 20. Section 20.2.1 - The use of a canonical name for an algorithm implies to me a registry for the canonical names. Is such a registry planned and what are the registration procedures for this going to be? Is this going to be a first publish registry in that if Mozilla publishes a new algorithm with a specific name that becomes the canonical name? 21. Section 20.5 - I would have expected the name of this algorithm to match that in section 20.4 and thus it would be RSASSA-PSS 22. Section 20.6 - RSA-OAEP should be RSAES-OAEP
Received on Thursday, 18 April 2013 17:25:39 UTC