2013������9·���4�����䏢����³«��돪����µ������������OpenID Tech Night Vol.10 ������»²²������·��������������¡�
���������������\��\���\Ð\���\���������������RSA½��Ï��¾����������¾��⏢����·���¹½�����������Џ��������¹��¡� RSA������½��Ï��¾������������������������¾��⏢����������·��»»\³\¹\������̏��«���«����������������...
�����Ώ����ď����������������������ҏ��µ��������¡��ӏ����я����я���µ��؏�����������������������������¡�RSA½��Ï��¾����������¾��⏢����½��Ï��¾�����������������������������µ�������쏢����·��»»\³\¹\�����������������������������¡�¡ߏ��������« »�ߏ����������������ď��������ޏ��������ӏ��̏��̏������������я�¡ߏ�������¡� ���ӏ�����������¡���������������������������������㏢���������Ώ����������㏢����¡�¡ߏ�����¼���»�������������\����¼\���PC����������������㏢���������Ώ��������·�����ď�¡�
������¾��⏩����������
�돪�²¼�������³�����������ҏ�����¾��⏢�·�����������Ώ����ď�����������»�ߏ��������������¹��¡�
- ½��Ï��¾�������������������������¾��⏢�������������������������������̏���������������«��¡�RSA������ECC(ECDSA)�������������돫����������̏��������������«��¡�
- ����ޏ����̏����㏢���¡돪�¹�������������㏢����RSA½��Ï��¾������ECDSA½��Ï��¾��������������������������������������������������㏢�¹���̏��������������«��¡�
- RSA½��Ï��¾����������������돪�¹���̏����Џ����������������ď����������¡�������������������������������������㏢�¹���̏��������������«��¡�
- ECDSA½��Ï��¾�������������������ޏ����������Џ���������돪�¹���̏����Џ����������������ď����������¡�������������������������������������㏢�¹���̏��������������«��¡�
- Ruby+OpenSSL������Java JCE��������������������������������������������������㏢�¹���̏��������������«��¡�
������¾��⏪�������Ï�����¾��⡭�����
�������������������Ð���������̏�������������������������������������������������OpenSSL\��㏢�¼\¹��������������������Java JCE\��㏢�¼\¹������������������������������㏢�������¹��¡� ������������������������OpenSSL������C������½��Џ�������������������������������������������¡�Ruby������»������������������·�����ď�¡� ½���������»��С���ӏ�������̏�������������������������������������������¡�Ruby+OpenSSL��¡�Java JCE������¼����������������Ï���������Џ���������������̏��������·���������������������¹��¡�
- ���������
-
- ����돢����¾��⏪����½��Џ�����\������¼\���������»��С���ӏ�����½���������»��С���ӏ������������������������������¡�
- ����̏�����¾���·���������돫����������ď�����\���\���\·\���·��»»������»��С���ӏ�����½���������»��С���ӏ������������������������¡�
- ����ޡ돫�������\���\·\��я���������̏��������¹��������¡�
- ��돩������̏����Џ��·����������������ޡ돫���������돢����2000²��я�����½��Ï��¾�����������¡�½��Ï��¾������¾��⏢����»��С���ӏ�����·�ߏ���̏�¡�
- ������³«�����돪�¹���������\���\���\��폢�¼\���\���\¹�����ҏ��������������ď��������������ޏ���������������½��Ï��¾���о�������"aaa"�������»������������»��⏪�я�¡�
- SHA1withRSA���������·������������SHA1withECDSA������������³��я��¹��������¡�
- Ruby+OpenSSL
-
- Ruby������½���������'benchmark'\���\���\������¼\��������ҏ����Џ�������¡�\���\������¼\µ\���������¹��ԏ����Ï�¡�benchmark������real������»��С���ӏ����ҏ����Џ�������������¡�
- Java JCE
-
- \���\���\������¼\·\���\���\������¼\�ߏ�������돢����������������System.currentTimeMillis()�����������������¹������½���������»��С���ӏ��������¹��������¡�
������¾��⡭����� \���\·\��� Lenovo X201s CPU Intel Core i7 L620 2.00GHz \���\���\��� 8GB OS Microsoft Windows 7 Professional 32bit SP1 Java \Ð���¼\���\���\��� Oracle Java 1.7.0 build 1.7.0-b147 RSA½��Ï��¾JCE\��\���\Ð\���\��� SunRsaSign 1.7 Provider ECDSA½��Ï��¾JCE\��\���\Ð\���\��� SunEC 1.7 Provider Ruby (+ OpenSSL) \Ð���¼\���\���\��� cygwin C Ruby 1.9.3p194 OpenSSL OpenSSL 1.0.1c
Ruby + OpenSSL������½��Ï��¾
Ruby + OpenSSL������RSA������ECDSA½��Ï��¾���¹��������������������¡�OpenSSL\³\���\���\��������������������������� PKCS#5���������������폢��돢����������³«����돢����½�����������·���������³�����я���������������������½��Ï��¾�����������¡�½��Ï��¾������¾��⏢�¹���������Ð\���\���\·��¡�
ECDSA������»��Џ�����\���\���\·\���������¼«����̏�����·��»»���¹������������������¡� ECDSA������½��Ï��¾������������ASN.1¹½���������������½���½���¹���������³������������µ��������ҏ��������ޏ��������Ð���������������������������«������»�ߏ��������������¹��¡�# ECDSA������½��Ï��¾������������ prvKey = OpenSSL::PKey::EC.new(File.read(PKCS#5�����������폢���PEM)) hashed = OpenSSL::Digest::SHA1.digest(½��Ï��¾���о���\���\���\»���¼\���) sigVal = prvKey.dsa_sign_asn1(hashed) # ECDSA������½��Ï��¾������¾��� pubKey = OpenSSL::PKey::EC.new(File.read(PKCS#5������³«�����PEM)) hashed = OpenSSL::Digest::SHA1.digest(data) isValid = pubKey.dsa_verify_asn1(hashed, sigVal) # RSA������½��Ï��¾������������ prvKey = OpenSSL::PKey::RSA.new(File.read(PKCS#5�����������폢���PEM)) sigVal = prvKey.sign("sha1", data) # RSA������½��Ï��¾������¾��� pubKey = OpenSSL::PKey::RSA.new(File.read(PKCS#5������³«�����PEM)) isValid = pubKey.verify("sha1", sigVal, data)
Java JCE������½��Ï��¾
��돪��������¡�\���¼\¹\���\��»���������������³��⏢�·�����������ď��������������������������������\���\���\���\��������ҏ����������Ώ����ď�����¾���¹�����������������¡� PKCS#8 DER���������������������������������������ޏ����������������я��������������������������«���µ���·�����������Ώ����������� ¼«����̏�����µ»��� ����OpenSSL����������돪����������·�����ď����������폢��돢����Java������»��������Ï�¡����̏��«���������«������������½��؏��«���������������·�����ď�¡� �����������폢���\���\���\���\���������PKCS#8���������·��������������������¡���³«����돢����PKCS#8���������·�����������Ï��������·�����ď����� ���ӏ��������������������������������������쏢�쏢¡ߏ���돢����\���\���\������¼\��ď�����ď�ԏ�����(BigInteger)������»������������¹���������« ¾��⏪����½��Џ��������������������������������������ޏ��������������½�����Ï�������¡�»����������������������«���������µ����������������¼«������½��Ï��¾¾��⏪����½��Џ����ҏ�돫��������������·�����ď�¡�
ECDSA������½��Ï��¾������������������³�����я�����������������¡�
KeySpec keySpec = new PKCS8EncodedKeySpec(PKCS#8�����������폢���DER������\������¼\���byte�����只��); KeyFactory kf = KeyFactory.getInstance("EC"); PrivateKey prvKey = kf.generatePrivate(keySpec); Signature sig = Signature.getInstance("SHA1withECDSA"); sig.initSign(prvKey); sig.update(½��Ï��¾���о���\������¼\���aaa); sigVal = sig.sign();
RSA������½��Ï��¾������������������³�����я�����������������¡�
KeySpec keySpec = new PKCS8EncodedKeySpec(PKCS#8�����������폢���DER������\������¼\���byte�����只��); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey prvKey = kf.generatePrivate(keySpec); Signature sig = Signature.getInstance("SHA1withRSA"); sig.initSign(prvKey); sig.update(½��Ï��¾���о���\������¼\���aaa); sigVal = sig.sign();
RSA������ECDSA������½��Ï��¾������¾��⏢�������³�����я�����������������¡�
CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cer = (X509Certificate)cf.generateCertificate(new FileInputStream(������³«�����¾��⏪����½���)); pubKey = cer.getPublicKey(); Signature sig = Signature.getInstance("SHA1withECDSA"); // RSA������������SHA1withRSA sig.initVerify(pubKey); sig.update(½��Ï��¾���о���\������¼\���); isValid = sig.verify(sigVal);
��돪�½�����¡�BouncyCastle»�����𡯏��Ð���������������«������������»�ߏ����������ď����я��������¹���̏�¡� Java SE 7���«�������������ޏ�Ώ����Џ�����\��\���\Ð\���\���SunEC���̏�����½��������Ѣ�����µ�����������������������Ï����������������������ď�����������¡� Java SE 7����������½���\Ð\���\���\������µ������������\��\���\Ð\���\���������»��������Ï��³���������������·���������·�����ď�¡� \µ\����¼\������·�������������������������ޏ����������Џ����������������Ï��������������ޏ�����»�ߏ����������ď����� ����돢����¼«����̏���������������㏢�����������������ď������������½������������»²¹������������·���������·�����ď�¡� ( ½��� Java SE 7 \���\������¼\¹µ����돢��JCE�����������������Ï����������������������я������폢¡�)
RSA������ECC�����¡돪�¹�������������㏪�Ð�ޏ��
�돫���������������¡�
- ECC 160bit ������ RSA 1024bit�����������������ӏ��¹��������¡��������«
- ECC 256bit ������ RSA 3072bit�����������������ӏ��¹��������¡��������«
���½�����ҡ돫⏪���Џ��·�����������쏢����������·�����������Ï�¡�
����Ï����������돪�¹��� | DSA | RSA | ECDSA |
---|---|---|---|
80 | L=1024,N=160 | 1024 | 160-223 |
112 | L=2048,N=256 | 2048 | 224-255 |
128 | L=3072,N=256 | 3072 | 256-383 |
192 | L=7680,N=384 | 7680 | 384-511 |
256 | L=15360,N=512 | 15360 | 512- |
(·���²���1)RSA������½��Ï��¾���������������½��Ï��¾������¾��⏢�������������������������̏�����������«
�����������돢����RSA����돢����������½��Ï��¾������������¾��⏢�̏�����������������������������돫������Ï������«���«�����������Ώ��������·�����������Ï�¡�
½��Ï��¾�����������������������������¡�½��Ï��¾�����������̡�µ�������쏢����»��С���ӏ��̏��«���«���������³���������̏��������«���������������¹��¡� �����������ď�¡�돪�¹���̏��¹�����������������������叢����»�����ď�ԡ������ď�ԏ����쏢����»��С���ӏ��̏��«���«���������³���������̏��������«���������������¹��¡� ½��Ï��¾�����������������������·������������������������Java JCE���������㏢�µ���̏��²�����̏��������¹��¡�
(·���²���2)ECDSA������½��Ï��¾���������������½��Ï��¾������¾��⏢�������������������������̏�����������«
\��\���\��؏��«������ECDSA������������RSA������������µ��؏�����½��Ï��¾������¾��⏢����������½��Ï��¾��������������������� �����������돢�«���������̏�����������������������¹���̏�¡������������������Џ����������������������������������������Ï��³���������̏��������«���������������¹��¡� �����������ď�¡�ޏ���������돪�¹������secp160r1, secp160r2, secp160k1������������������ �����叢���������я�����½�������������㏢�����������돫���������������������������¡�돪�¹���̏��¹������������������������½���������»��С���ӏ�����������𡯏��������¹���̏�¡� RSA���̏�����¾�������������돪�¹�����¡ޏ�������������¼��؏��ޏ������������������Ð���·��¡�ECDSA������������ ������������������돪�¹���̏��¹������������������������������½���������»��С���ӏ��̏��¹������������������������������������»��ӏ��̏��������«���������������¹��¡�
(·���²���3)����ޏ������돪�¹�������������㏢����������RSA������ECDSA���������������������������̏�����������«
ECC 160bit ������RSA 1024bit�����������叢���䏩��ޏ����㏢���¡돪�¹�������������㏢�������¹��¡� ECDSA������������³��я��·��������¡�RSA������½��Ï��¾��������������������������������������㏢�������̏�¡�½��Ï��¾������¾��⏢���� ������������������������������³���������̏��������«���������������¹��¡�
����돪�¹���̏��¹������\�ޏ��¼\¹��¡�ECC 256bit ����������ޏ����㏢����RSA 3072bit �����ҏ�����³��я��·�����������Ώ�������������¡� ½���½��̡����·��������������Џ��������������������»�����я��̏�¡�돪�¹���̏��¹�����������������������ď���̏�¡� ������¾���������RSA½��Ï��¾����������������»��С���ӏ��̏��¹���������������������������������������¹��¡� ���³���������������Ð���·��¡�ECDSA������������RSA�����叢��������������돪�¹���̏��¹�����������������������ġޏ�������������¼��؏��ޏ��������������������»�����я�¡�
������������������
���������ޏ�����������������������������������»��С���ӏ��̏��«���«������½���������
- RSA½��Ï��¾�������������������������������¾���������»��С���ӏ��̏��«���«������
- ECDSA������½��Ï��¾������¾��⏢����½��Ï��¾��������������������������叢���я�����¾������·���¹������»��С���ӏ��̏��«���«������
- ECDSA������½��Ï��¾���������������������������������»��С���ӏ��̏��«���«������
- RSA½��Ï��¾����������¾��⏢����������¾������������»»��С���ӏ�������������ECDSA������½��Ï��¾���������������������������������»��С���ӏ��̏��«���«������
- RSA����������������돪�¹���̏��¹�����������������������叢�������½������·¹�����Џ��̏��²�����̏�������������������¡�
- ECDSA������RSA�����叢��������������돪�¹���̏��¹�������������������ޏ�������������¼��؏��ޏ�������������¡�
(���½���������¾����������������¼�돢����)��������㏢������¡�RSA½��Ï��¾������½��Ï��¾³���������«���½���������¾����������돪�¹������3¾�����¡�2¾����������������������¹������\��\���\��\���\���\������������¹��¡�������������������¡�돪�¹����2�����䏢�������������������Ð��¡�½��Џ��¾������½���������»��С���ӏ���8�����䏢¡�½��Ï��¾³����������4�����䏢�������������������������¹��¡�돫�������ECDSA����������Ï�����3¾���������\��\���\��\���\���\���������������������¡�돪�¹����2�����䏢�������������������Ð����Ï����������叢����8�����䏢�������������������������¹��¡�
�����ď�������¡�돪�����������������¡�RSA������������¹��·���»��С���ӏ��̏���돪�¹������½���»�����ď��»��С���ӏ��������������������������Ð���·��¡�ECDSA������(���������������³������)»�����ď��»��С���ӏ��������¹��¡��½���������ď����������䏢���¡돪���������������³��������¹�����������ď�������������������¡�RSA������������ECDSA����������������돪�¹���������䏢ď�ԏ����ҏ��������������¼������������������ޏ��������Ð���������������������»�����я�¡�
������������������¡����Ï����������돪�¹�����������돪�¹��¹»»���·������¾���¹�����¡�ޏ�����3¾���\��\���\��\���\���\�����������������¡�RSA½��Ï��¾������½���������»��С���ӏ����¡ޏ�������я�����ECDSA������������������������������������«��𡯏��������¹��¡�RSA½��Ï��¾³������������2¾���\��\���\��\���\���\���������������������¡��½�������돪�³�돢���������������㏢����½���������»��С���ӏ�����������я�����������¾���������¾������������������³���������������������������������¹��¡�
¼���������¼������³��������������¡�\\���\���\·\������������������������¡ޏ�����������������������������̏����돢�·���������������������������쏢�������������������������������������»�����я��̏�¡����������½�����Ï����������á����·���������������������������»�ߏ��������������¹��¡�
��돪��������¡�¼«����̏�����¼��Џ����؏�����������(²��ҏ��������������½�����Ï�������ď������)���³���������؏����ҡ���ӡ돫����������������·�����������㏢�������³���������̏����ď�����������������¡�\³\���\���\������·�����������Ώ��������·�����ď�¡�