Conseils et formations : vos deux atouts pour réussir !
Accueil > Développement > Articles
Performances des méthodes de cryptage

Introduction


Le but de ce benchmark est de comparer les performances des différentes méthodes de cryptage de données proposées par SQLServer2005.
On en dénombre 4 à ce jour :

. par mot de passe (byphrase)
. par certificat
. par clé symétrique
. par clé asymétrique

Conditions du test


La base utilisée est AdventureWorks, bien connue de tous, la machine étant un
Dual Core 2.20 Ghtz 2 Go de RAM et disque dur de 7200 tours.
Maintenant, l'essentiel est la comparaison relative des différentes méthodes, pas leur valeur absolue.

SQLServer 2005 en en service pack 2.

Préparation des données :


    use adventureworks

    go

 

    if exists (select * from information_schema.tables

        where table_name = 'CarteCredit')

        drop table CarteCredit

    go

    create table CarteCredit (

        IDCarte int not null,

        TypeCarte nvarchar(50) not null,

        NoCarte nvarchar(25) not null,

        MoisExpiration tinyint not null,

        AnneeExpiration smallint not null,

        DateMaj datetime not null,

        NoCarteCrypte varbinary(max),

        primary key (IDcarte))

    go

 

    insert into dbo.CarteCredit (IDCarte,TypeCarte,NoCarte,MoisExpiration,AnneeExpiration,DateMaj)

    select CreditCardID,CardType,CardNumber,ExpMonth,ExpYear,ModifiedDate

    from Sales.CreditCard

    go

 

    insert into dbo.CarteCredit (IDCarte,TypeCarte,NoCarte,MoisExpiration,AnneeExpiration,DateMaj)

    select CreditCardID + 20000,CardType,CardNumber,ExpMonth,ExpYear,ModifiedDate

    from Sales.CreditCard

    go

 

 

Préparation des clés et certificats :


    -- Création de la clé master de la base = celle qui protégera les autres

    create master key encryption by password = 'codesecretdemaster'

    go

 

 

    -- On crée une clé asymétrique

    create ASYMMETRIC key MaCleAsymetrique

    WITH ALgoRITHM = RSA_2048

 

 

    -- On crée un certificat

    create CERTifICATE MonCertificat

    WITH SUBJECT = 'Performances de cryptage',

    START_DATE = '01/01/2007' ,EXPIRY_DATE = '01/01/2010'

 

 

    -- On crée une clé symétrique basée ici sur un certificat

    create SYMMETRIC key MaCleSymetrique

    WITH ALgoRITHM = DES

    ENCRYPTION BY CERTifICATE MonCertificat

 

Le code du benchmark :


    set statistics io on

    go

    set statistics time on

    go

 

    --1) Par phrase Encryptage puis décryptage

    print 'Phrase'

    update dbo.CarteCredit set NoCarteCrypte = encryptbypassphrase('CodeSecret',NoCarte)

 

    select count(*)

    from dbo.CarteCredit

    where NoCarte = CONVERT(Nvarchar(25),

    DECRYPTBYPASSPHRASE('CodeSecret', NoCarteCrypte))

    print '---------'

    go

 

    -- 2) Par certificat

    print 'Certificat'

    update dbo.CarteCredit set NoCarteCrypte = ENCRYPTBYCERT(CERT_ID('MonCertificat'), NoCarte)

 

    select count(*)

    from dbo.CarteCredit

    where NoCarte =

    CONVERT(Nvarchar(25),

    DECRYPTBYCERT(CERT_ID('MonCertificat'), NoCarteCrypte))

    print '---------'

    go

 

 

    --3) Par clé symétrique

    OPEN SYMMETRIC key MaCleSymetrique

    DECRYPTION BY CERTifICATE MonCertificat

 

    print 'Clé symétrique'

    update dbo.CarteCredit set NoCarteCrypte = ENCRYPTBYkey(key_GUID('MaCleSymetrique'), NoCarte)

 

    select count(*)

    from dbo.CarteCredit

    where NoCarte =

    CONVERT(Nvarchar(25),

    DECRYPTBYkey(NoCarteCrypte))

    print '---------'

 

    CLOSE SYMMETRIC key MaCleSymetrique

    go

 

 

    --4) Par clé asymétriqe

    --create ASYMMETRIC key MaCleAsymetrique

    --WITH ALgoRITHM = RSA_2048

    print 'Clé asymétrique'

    update dbo.CarteCredit set NoCarteCrypte =

    ENCRYPTBYASYMkey(ASYMkey_ID('MaCleAsymetrique'), NoCarte)

 

    select count(*)

    from dbo.CarteCredit

    where NoCarte =

    CONVERT(Nvarchar(25),

    DECRYPTBYASYMkey(ASYMkey_ID('MaCleAsymetrique'),

    NoCarteCrypte))

    print '---------'

    go

 

Le résultat des mesures :


Les ios sont en pages de SQLServer soit 8kOctets
Le cpu est en milli secondes
Le temps passé est aussi en milli secondes

 

 

 

Conclusion :


Les chiffres parlent d'eux mêmes, et il sera prudent d'évaluer la méthode choisie si on ne veut pas écrouler le serveur SQL par une consommation excessive de CPU.

La méthode par clé asymétrique a quand même consommé une demi-heure de CPU pour 38000 lignes...
A l'inverse,la clé symétrique est infiniment moins gourmande !

 ‭(Masqué)‬ WebPart1 Web Part

/Developpement/Performances des méthodes de cryptage/