�@

�A��
Enterprise Library�T��

�Í����@�\���ȒP�Ɏ������悤

�\�\ �Ώ̈Í��@�\�ƈÍ��n�b�V�����ȒP�ɗ��p���邽�߂̋@�\��񋟂���uCryptography Application Block�v �\�\

�A�o�i�[�h��������@�s�� �����ipatterns & practices Champion�j
2006/08/10
Page1 Page2

�@�O���ł́AASP.NET 2.0�̔F�؁E�F�‹@�\�𓥂܂��Ȃ���ASecurity Application Block���g�����F�‹@�\�ɂ‚��ĉ�������B

�@����͈Í����@�\��񋟂���Cryptography Application Block�i�ȉ�CryptoAB�j�ɂ‚��ĉ������B�Ȃ��A�O���2006�N1����.NET Framework 2.0�ɑΉ�����Enterprise Library 2.0�i�ȉ�EntLib 2.0�j�������[�X���ꂽ���Ƃ͂��łɏq�ׂĂ��邪�ACryptoAB��Hash Provider�i���n�b�V�������A���S���Y�����J�v�Z�������e�Ղɗ��p���邽�߂̋@�\��񋟂���v���o�C�_�j�����������ƈȊO�ł͓��ɋ@�\�̕ύX�͂Ȃ����߁A�{�e�̓��e��EntLib 2.0�ȑO�̃o�[�W�����ł��K�p�”\�ł���B

�Í����Ƃ�

�@�Í������ꌾ�ł����΁A�u����f�[�^����O�҂ɓǂݎ��ꂽ��A�ύX���ꂽ�肵�Ȃ��悤�ɁA��ǂł��Ȃ��`���֕ϊ����邱�Ɓv�Ƃ������ƂɂȂ邪�A��茵���ɂ����Ȃ�A�u�Í����A���S���Y���ƁA�f�[�^������̐l���瑗��ꂽ���Ƃ�ۏ؂��邽�߂̎�@�Ƃ̑g�ݍ��킹�i���̑g�ݍ��킹���u�Í��v���~�e�B�u�v�Ƃ����j�ɂ���āA�f�[�^�̋@�����A�������A�M�҂傤����ۂ‚��Ɓv�Ƃ������ƂɂȂ邾�낤�B

�@�����ňÍ��v���~�e�B�u�Ƃ��ċ���������̂��ȉ��Ɏ����B

���v���~�e�B�u ���
���L�L�[�Í������i�Ώ̈Í��������j �P��̋��L�L�[�i�����L���j���g�p���āA�f�[�^�̈Í����╜�������s������
���J�L�[�Í������i��Ώ̈Í��������j ���J�L�[�Ɣ閧�L�[�i���閧���j�̃y�A���g�p���āA�f�[�^�̈Í����╜�������s������
�f�W�^������ ���M���ɌŗL�̃f�W�^���������쐬���A�f�[�^�̑��M�����m�F���邽�߂ɗ��p�����
�Í��n�b�V�� �C�ӂ̒����̃f�[�^���Œ蒷�̃o�C�g�E�V�[�P���X�ɕϊ����鏈���B�n�b�V���͓��v�I�Ɉ�ӂɂȂ�
�Í��v���~�e�B�u�̈ꗗ

�@�܂��͂����̈Í��v���~�e�B�u��.NET Framework�̊֌W�ɂ‚��ȕʂɌ��Ă����Ƃ��悤�B

�����L�L�[�Í������i�Ώ̈Í��������j

�@���L�L�[�Í������ł́A�P��̃L�[�𗘗p���ĔC�ӂ̃f�[�^�̈Í����ƕ������s���B���̂悤�ɈÍ����ƕ����œ����L�[���g�p���邱�Ƃ���Ώ̈Í��������Ƃ��Ă΂��B

�@���L�L�[�Í������́A��q������J�L�[�Í������Ɣ�ׂĔ��ɍ����ł��锼�ʁA���L�L�[���擾�����l�͒N�ł��f�[�^�𕜍����ł��Ă��܂����߁A���ۂ̉^�p���ɂ͋��L�L�[�̈����ɒ��ӂ��K�v�ł���B

�����J�L�[�Í������i��Ώ̈Í��������j

�@���J�L�[�Í������ł́A��ʂɌ��J���Ă��悢���J�L�[�ƁA���J���Ă͂����Ȃ��閧�L�[�𗘗p���ĔC�ӂ̃f�[�^�̈Í����ƕ������s���B

�@���J�L�[�Ɣ閧�L�[�̓y�A�Ƃ��č쐬�^���p����邽�߁A���J�L�[�ňÍ������ꂽ�f�[�^�́A�y�A�̔閧�L�[�ł��������ł��Ȃ��悤�ɂȂ��Ă���A�܂��A�閧�L�[�ŏ������ꂽ�f�[�^�̓y�A�̌��J�L�[�ł����������ł��Ȃ��B���̂悤�ɈÍ����ɗ��p����L�[�ƕ����ɗ��p����L�[���ʂ̃L�[�ł��邱�Ƃ���A��Ώ̈Í��������Ƃ��Ă΂��B

���f�W�^������

�@�f�W�^�������́A�C�ӂ̃��b�Z�[�W�ɑ΂��ăn�b�V���E�A���S���Y����K�p���ăn�b�V���l�𐶐����A������q�������J�L�[�Í������̔閧�L�[���g���ĈÍ������č쐬����B

�@�f�W�^���������ꂽ���b�Z�[�W�𕜍�������ꍇ�́A�Í����ŗ��p�����閧�L�[�̃y�A�ƂȂ���J�L�[���g���ĕ��������A�n�b�V���l�𕜌�����B�Ō�ɓ��l�̃n�b�V���E�A���S���Y�����g���ă��b�Z�[�W����n�b�V���l�����߁A�������ꂽ�n�b�V���l�Ɣ�r���邱�ƂŁA�f�[�^�������񂳂�Ă��Ȃ����Ƃ��������邱�Ƃ��ł���̂ł���B

���n�b�V��

�@�C�Ӓ��̃f�[�^�l���Œ蒷�̃f�[�^�ɕϊ�����֐����n�b�V���֐��ƌĂсA���̃n�b�V���֐�����ϊ����ꂽ�Œ蒷�̒l���n�b�V���l�ƌĂԁB��ʂɃn�b�V���Ƃ́A���̃n�b�V���l�����߂邱�Ƃ��w���B

�@�n�b�V���l�͔C�Ӓ��̕�����̂����A������1������ύX���������ł��A���̌�̃n�b�V���ł͕ʂ̒l����������A����̒l�Ƀn�b�V�������2�‚̈قȂ���͂����‚���̂́A�v�Z��s�”\�ł���B

�@�ȏ�A�����܂�4��ނ̈Í��v���~�e�B�u�ɂ‚��ĊȒP�ɉ�������킯�����A.NET Framework�ɂ͂����Í��v���~�e�B�u�̂��߂̃N���X�����łɗp�ӂ���Ă���̂ł���B

�@�ȉ��ɂ����Í��v���~�e�B�u��.NET Framework���񋟂����\�I�ȈÍ��N���X�Ƃ̃}�b�s���O�\�������B

���v���~�e�B�u �A���S���Y�� �N���X�� �A���S���Y�����
���L�L�[������
�i�Ώ̈Í��������j
DES
�iData Encryption Standard�j
DESCryptoServiceProvider 1960�N��㔼��IBM�Ђɂ���ĊJ�����ꂽ64bit�u���b�N�Í�����
TripleDES TripleDESCryptoServiceProvider DES��3�d�ɓK�p���邱�Ƃŋ��x�����߂�64bit�u���b�N�Í�����
RC2
�iRon�fs Code 2�j
RC2CryptoServiceProvider Ron Rivest���ɂ���ĊJ�����ꂽ64bit�u���b�N�Í������ł���ADES�ɔ�ׂĈÍ������x�������A�Í��L�[��������x�•ϒ��ł���
Rijndael RijndaelManaged �x���M�[�̐��w��Joan Daemen����Vincent Rijmen���ɂ���ĊJ�����ꂽ�Í������ŁA�u���b�N����128�^192�^256bit�̒�����I���ł���
���J�L�[������
�i��Ώ̈Í��������j
DSA
�iDigital Signature Algorithm�j
DSACryptoServiceProvider NIST*1���d�q�����̕W���Ƃ��ĊJ���������J�L�[�Í�����
RSA
�iRivest Shamir Adleman�j
RSACryptoServiceProvider Ronald Rivest���AAdi Shamir���ALeonard Adleman����3�l��1978�N�ɊJ���������J�L�[�Í�����
�����̈Í��� DSA DSACryptoServiceProvider ��L��DSA���Q��
RSA RSACryptoServiceProvider ��L��RSA���Q��
�n�b�V�� SHA1
�iSecure Hash Algorithm 1�j
HMACSHA1 NIST���K�i������160bit���̃n�b�V���֐�
TripleDES MACTripleDES ��L��DES���Q��
MD5 MD5CryptoServiceProvider Ronald Rivest���ɂ���ĊJ�����ꂽ128bit���̃n�b�V���֐�
SHA1 SHA1Managed ��L��SHA1���Q��
SHA256 SHA256Managed NIST���K�i������256bit���̃n�b�V���֐�
SHA384 SHA384Managed NIST���K�i������384bit���̃n�b�V���֐�
SHA512 SHA512Managed NIST���K�i������512bit���̃n�b�V���֐�
�Í��A���S���Y����.NET Framework�̃}�b�s���O
*1 NIST�iNational Institute of Standards and Technology�j�́A�č����{�@�ւł���č��W���Z�p�ǂ��w���B
�E�\���̊e�N���X��System.Security.Cryptography���O��Ԕz���ɑ��݂��Ă���B
�EHMACSHA1��HMAC�iHash-based Message Authentication Code�j���v�Z����B

�@���̂悤��.NET Framework�ɂ͂��łɎ傾�����Í����A���S���Y���ɑΉ������N���X���p�ӂ���Ă���A�����̃N���X�𗘗p���邱�ƂŃA�v���P�[�V��������Í����@�\�𗘗p���邱�Ƃ��”\�Ȃ̂ł���B

�@����ł͂��łɈÍ����N���X���p�ӂ���Ă���ɂ�������炸�A�Ȃ��킴�킴EntLib�œ��l�̋@�\������CryptoAB���񋟂���Ă���̂��낤���H ���̋^��ɑ΂���񓚂Ƃ��Ă̓V���v���ȃC���^�[�t�F�C�X�A���ꂩ��Z�L�����e�B�Ƃ���2�‚̗v������������B

���V���v���ȃC���^�[�t�F�C�X

�@�܂��C�ӂ̕������C�ӂ̑Ώ̃A���S���Y���ňÍ������ꂽ������ɕϊ����鏈���ɂ‚��ċL�q�����ꍇ�́A�ȉ���CryptoAB���g��Ȃ��T���v���E�v���O������CryptoAB���g�����ꍇ�̃T���v���E�v���O����������ׂĂ݂Ăق����B

�@�܂���CryptoAB���g��Ȃ��ꍇ�̃T���v���E�v���O�����̗Ⴞ�iC#�j�B

using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace NotCryptoABSample
{
  class Program
  {
    static void Main(string[] args)
    {
      // �ϐ�algorithmName�ɂ͔C�ӂ̑Ώ̃A���S���Y����
      // �i�Ⴆ�΁uDES�v�uTripleDES�v�uRC2�v�uRijndael�v�Ȃǁj���w��
      string algorithmName = "Rijndael";
      using(SymmetricAlgorithm symmetricAlgorithm  =
              SymmetricAlgorithm.Create(algorithmName))
      {
        symmetricAlgorithm.GenerateKey();
        symmetricAlgorithm.GenerateIV();

        byte[] key = symmetricAlgorithm.Key;
        byte[] IV = symmetricAlgorithm.IV;

        using(ICryptoTransform encryptor =
                symmetricAlgorithm.CreateEncryptor())
        using(MemoryStream msEncrypt = new MemoryStream())
        using(CryptoStream csEncrypt = new CryptoStream(
                msEncrypt, encryptor, CryptoStreamMode.Write))
        {
          UTF8Encoding textConverter = new UTF8Encoding();
          byte[] toEncrypt =
            textConverter.GetBytes("�Í����������C�ӂ̕�����");
          csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
          csEncrypt.FlushFinalBlock();

          string encryptedString =
            Encoding.UTF8.GetString(msEncrypt.ToArray());
        }
      }
    }
  }
}
CryptoAB���g��Ȃ��ꍇ�̃T���v���E�v���O����

�@�����CryptoAB���g���ē��l��Rijndael�A���S���Y�����g�����Í������s���ƈȉ��̂悤�ȃT���v���E�v���O�����ɂȂ�B

using System;
using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;

namespace CryptoABSample
{
  class Program
  {
    static void Main(string[] args)
    {
      string encryptedString = Cryptographer.EncryptSymmetric(
        "SymmManaged", "�Í����������C�ӂ̕�����");
    }
  }
}
CryptoAB���g�����ꍇ�̃T���v���E�v���O����
�O�����Ƃ���Configuration�R���\�[���ō\����ݒ肵�Ă����K�v�����邪�A����ɂ‚��Ă͌�q����B

�@�����̃T���v���E�v���O����������ׂ�Ƃ��̍��͈�ڂ�傤�R�ł��邪�ACryptoAB�𗘗p�����ꍇ�́A�P�ɃR�[�h�̋L�q�ʂ��������邾���łȂ��A�I�u�W�F�N�g�̉�������i��L�R�[�h�ł�using�X�e�[�g�����g���g�p�j�܂ł��J�v�Z�������Ă����̂ł���B

���Z�L�����e�B

�@���L�L�[�Í������͎�y�ɓ����ł��锼�ʁA���L�L�[�̎�舵���ɂ‚��Ē��ӂ���K�v������B�‚܂肹�������C�ӂ̃f�[�^���Í������Ă��A��O�҂����L�L�[���擾���Ă��܂��΁A�N�ł��������ăf�[�^�����o�����Ƃ��”\�Ȃ̂ł���B������񂱂�͌��J�L�[�Í������𗘗p�����ꍇ�̔閧�L�[�̎�舵���ɂ‚��Ă����l�ł���B

�@CryptoAB�𗘗p���Ȃ��T���v���E�v���O�����ł̓v���O�������ŁusymmetricAlgorithm.GenerateKey();�v�ƋL�q���邱�ƂŎ����I�ɃL�[�l�𐶐����Ă��邪�A���ۂ̉^�p�ł͈Í������f�[�^�����‚ł��������ł���悤�ɂ��炩���ߐ������Ă������L�[���O���X�g�A�Ɋi�[���A�������荞��ňÍ����A�������s���̂���ʓI�ł��낤�B

�@���̏ꍇ�A�L�[���i�[����O���X�g�A�̌��Ƃ��ă��W�X�g���AACL�i�A�N�Z�X���䃊�X�g�j�ɂ��K�؂ȃA�N�Z�X������ݒ肵���O���t�@�C���A�A�v���P�[�V�����\���t�@�C���iWeb�A�v���P�[�V������Web.config�AWindows�A�v���P�[�V������App.config�j�Ȃǂ���������B

�@����.NET Framework 2.0����́ARSA�A���S���Y�����g���ăA�v���P�[�V�����\���t�@�C�����̊e�\���Z�N�V�������Í������邱�Ƃ��”\�ɂȂ��Ă��邽�߁i�ڍׂ�How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA���Q�Ɓj�A�L�[���ݒ肳��Ă���Z�N�V�������Í������邱�Ƃ��”\�ł��邪�A���̏ꍇ�ł����x�̓A�v���P�[�V�����\���t�@�C���̈Í����ɗ��p�����閧�L�[�̕ی�Ƃ�����肪�������邱�ƂɂȂ�B

�@����ł͂��̃L�[�̕ی�Ƃ������ɑ΂���CryptoAB�͂ǂ̂悤�ȊǗ����s���Ă���̂��낤���H

��Data Protection API�𗘗p�����L�[�̕ی�

�@CryptoAB�̓L�[�̕ی��Data Protection API�i�ȉ�DPAPI�j�𗘗p���Ă���BDPAPI�Ƃ�Windows 2000�ȍ~�̃I�y���[�e�B���O�E�V�X�e���Œ񋟂���Ă���f�[�^�̈Í����ƕ������s�����߂�Win32 API�̂��Ƃł���B

�@DPAPI�ł́ADPAPI�̊֐����Ăяo�����R�[�h�Ɋ֘A�t�����Ă��郆�[�U�[�E�A�J�E���g�̃p�X���[�h���g�p���āA�Í����L�[�𐶐�����B�����ăI�y���[�e�B���O�E�V�X�e�������̈Í����L�[���Ǘ����邱�ƂŁA�Í����L�[�̕ی�Ƃ��������������Ă���B

�@�Ȃ��ADPAPI�̏ڍׂɂ‚��Ă͈ȉ���URL���Q�l�ɂ���Ƃ悢���낤�B

�@����ł�CryptoAB�̓����菇�ɂ‚��ĉ�����Ă������B


�@INDEX
�@ �A�ځFEnterprise Library�T��
�@ �Í����@�\���ȒP�Ɏ������悤
  1�D�Í����Ƃ�
�@   2�DConfiguration�R���\�[����CryptoAB�̍\����ݒ肷��
�@
CfbNXEy[Ww �@�uEnterprise Library�T���v


Insider.NET �t�H�[���� �V���L��
  • ��2��@�Ȍ��ȃR�[�f�B���O�̂��߂� �i2017/7/26�j
    �@�����_���ŋL�q�ł��郁���o�̑����Athrow���Aout�ϐ��A�^�v���ȂǁAC# 7�ɂ͈ȑO�����R�[�h���Ȍ��ɋL�q�ł���悤�ȋ@�\����������Ă���
  • ��1��@Visual Studio Code�f�o�b�O�̊�b�m�� �i2017/7/21�j
    �@Node.js�v���O�������f�o�b�O���Ȃ���AVisual Studio Code�ɓ�������Ă���f�o�b�O�@�\�̊�{�́u�L�v���}�X�^�[���悤
  • ��1��@���ĂȃR�[�f�B���O�̂��߂� �i2017/7/19�j
    �@C# 7�Œlj����ꂽ�V�@�\�̒�����A�u���l���e�����\���̉��P�v�Ɓu���[�J���֐��v���Љ��B�����͕�����₷���R�[�h���L�q����̂Ɏg����
  • Presentation Translator �i2017/7/18�j
    �@Presentation Translator��PowerPoint�p�̃A�h�C���B�v���[���e�[�V�������̎����̕t����A������ł̎��^�����A�X���C�h�̖|����s����
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

Insider.NET �L�������L���O

�{�� ����