Andre Zepezauer wrote: > On Thu, 2010-09-16 at 19:21 +0200, Viktor TARASOV wrote: > >> Hello Andre, >> >> Andre Zepezauer wrote: >> >>> Hello Viktor, >>> >>> there are two distinct properties of CardOS, which I belief you have >>> mixed. On key generation time one has to decide: >>> >>> 1. if the key can be used with sign or decipher (but not both) >>> 2. the padding algorithm the card performs when executing a security >>> operation with the generated key >>> >>> Now someone may wonder, why there are keys that can be used with both >>> operations (sign+decipher). This is possible, because the RSA_PURE >>> padding schema allows the emulation of one operation with the other one. >>> That means, decipher can be emulated with sign and vice versa. >>> >>> >> Well, probably I've missed something. >> >> In the manual I see the chapter "3.43 SIGN BY DECRYPTION KEY". >> It explains that the algorithm 'RSA_SIG (algo-id=0x88/0x86)' can be >> performed when the proprietary command 'SIGN-BY-DECRYPTION' is applied >> to the key, created with the algorithm 'RSA (algo-id=0x08/0x06)' . >> >> I tested this mechanism in a 'manual' APDU mode for the imported 1024 >> and 2048 bits keys . >> >> PSO_DEC do not support the chaining and to perform decryption with >> RSA2_PURE 2048bits the support of extended APDUs is needed. >> For a while it do not works for me. >> > > It works! Check that your reader supports extended APDUs and that the > ifd-handler does it too. We are using omnikey readers with proprietary > omnikey ifd-handler. > > >> SIGN-BY-DECRYPTION, like PSO_CDS, uses internal padding, that's why no >> needs of extended APDUs to use the key 2048bit. >> >> For that reasons I was considering this mechanism as a good one to >> implement the double key usage. >> >> >> >>> In general, only one single generic security operation is sufficient to >>> perform signing _and_ decrypting operations, if RSA_PURE padding schema >>> is used ***by the card***. This holds for every card! >>> >>> >> Sorry, does the RSA_PURE algorithm uses the padding by card? >> > > If the BSO for a key was created with RSA_PURE algorithm, then the card > performs PSO_DEC with 'rsa raw' padding internally. The resulting output > will match the size of the key. For example when performing PSO_DEC with > 2048b keys the response is always 256 bytes. > > >>> Current opensc supports such a scenario through the NEED_USAGE flag, >>> which is set by the CardOS driver of course. It works something like >>> this: >>> >>> 1. if NEED_USAGE flag is set, then it is known to opensc that the card >>> supports only a single operation per key (sign _or_ decipher) >>> 2. if on card pkcs15 structure states key usage sign _and_ decipher >>> for a single key, then opensc assumes: >>> * padding schema RSA_PURE (correct assumption) >>> * PSO_DEC for sing _and_ decipher >>> (wrong assumption, because PSO_CDS is possible too) >>> >>> >> Afais, PSO_CDS supports RSA_PURE_SIG, not RSA_PURE. >> The RSA_PURE_SIG uses the card's padding. >> > > RSA_PURE_SIG means that 'rsa raw' is performed by PSO_CDS internally. > Which will led to absolutely the same result as RSA_PURE and PSO_DEC. > What is important here is the fact, that in both cases the raw padding > is performed. >
Thanks, I see better. Finally on Windows it also 'works for me' with the key 2048 bits . So, do you agree to close this ticket as 'already implemented' ? >>> Besides the sigh_with_decipher hack there is another problem which >>> arises when on card pkcs15 structure states only one operation per key. >>> >>> >> It's the subject of the next enhancement. >> I suggest something like >> http://www.opensc-project.org/opensc/browser/branches/vtarasov/opensc-sm.trunk/src/libopensc/pkcs15-prkey.c#L38 >> >> >> >>> Then the padding schema ***used by the card*** is unknown to opensc. It >>> hasn't to be RSA_PURE! Here the problem is, that it is impossible to >>> decide if padding is done by opensc or the card itself. >>> >>> >> Padding schema supported by key can be presented in the pkcd15 key >> attributes as an 'mechanism' and 'algo_id' >> of the supported (by key) algorithm. >> http://www.opensc-project.org/opensc/browser/trunk/src/libopensc/opensc.h#L118 >> >> >>> On Thu, 2010-09-16 at 11:51 +0200, Viktor TARASOV wrote: >>> >>> >>>> Hi, >>>> >>>> I would like to advance the ticket #151, >>>> this ticket needs the clarification of the 'Sign by Decryption' status. >>>> >>>> As it actually implemented, sign-by-decrypt uses on the card level the >>>> same command as for the 'PSO DEC' operation. Probably it works for other >>>> cards, but not for CardOS. >>>> (I use CardOS v4.3B and manual 'CardOS v4.2B User's Manual 09/2005'). >>>> >>>> >>> For me it works (CardOS v4.3B). But last svn check out is some weeks >>> ago. Did you generate keys for PSO_DEC and with RSA_PURE? >>> >>> >> For the tests I used the imported keys >> > > Correction: Did you have created BSOs for PSO_DEC and with RSA_PURE? > > >>>> To use sign-by-decrypt this card needs a distinct 'algo-id' when >>>> creating key ('RSA' instead of 'RSA_PURE' currently used by card >>>> driver), and an APDU distinct when getting signature. >>>> >>>> For CardOS card there is no means to get the 'algo-id' of existing key, >>>> and the pkcs15 attributes are the only source of this value. >>>> As for me, the most evident way to support sign-by-decrypt for CardOS is >>>> to enrich 'security environment' with the 'algo-id', to store this value >>>> into the private data of the card driver for the period between >>>> 'set_security_env' and 'decipher' and finally deviate to the card >>>> specific 'SIGN BY DECRYPTION KEY' procedure. >>>> >>>> >>> Would this also work for 'DECRYPT BY SIGNING KEY' scenarios? >>> >>> >>> >>>> Another way is to implement the common 'sign-by-decrypt' handlers, but, >>>> as for me, it's not yet completely justified. >>>> >>>> I wonder if CardOS maintainers or CardOS users are interested by such >>>> enhancement, otherwise I propose to change the type of ticket from >>>> 'defect' to 'enhancement'. >>>> >>>> >>> Better support for CardOS would be very welcome. >>> >>> Regards >>> Andre >>> >>> >> Kind wishes, >> Viktor. >> >> > > > -- Viktor Tarasov <viktor.tara...@opentrust.com> _______________________________________________ opensc-devel mailing list opensc-devel@lists.opensc-project.org http://www.opensc-project.org/mailman/listinfo/opensc-devel