Page 1 sur 2
Chiffrement de champs avec clefs publiques

Publié:
02 Juin 2008 à 15:26
par Michaël TERRIEN
Bonjour à toutes et à tous,
Il y a quelques temps, sur une base utilisée depuis quelques années, on m'avait demandé de chiffrer certains champs des documents enregistrés avec un masque. Je me suis donc orienté vers l'utilisation du champ PublicEncryptionKeys que j'ai défini avec le propriétés suivantes :
- Type : Noms
- modifiable
- Choix via la boite de dialogue d'adresse
Les champs à chiffrer ont bien la propriété 'Options de sécurité' renseigner avec 'Autoriser le chiffrement de ce champ'.
A l'époque nous étions en Domino V6.5 et il me semble que cela a fonctionner.
Depuis nous sommes passés en V8.01 et cela ne fonctionne plus. A l'enregistrement d'un document, je vois bien dans ma barre de message défiler les textes "Encrypting document with x public keys" mais pourtant les champs ne sont pas chiffrés quand un utilisateur non autorisés les visualisent. Le document ne contient pas les champs $Seal ou $SealData.
J'ai fait différents tests :
- Mise en place du chiffrement sur un autre masque de la même base => cela fonctionne bien
- Mise en place du chiffrement sur un autre masque de la même base et qui contient aussi un champ de type 'Lecteur' => Cela ne fonctionne pas non plus.
- Mise en place du chiffrement sur un masque dans une autre base => cela fonctionne bien
- Mise en place du chiffrement sur un masque d'une autre base et qui contient aussi un champ de type 'Lecteur' => Cela ne fonctionne pas non plus.
Le pbm semble donc venir des documents avec un champ de type lecteur. Quelqu'un a-t-il connaissance des règles qui régissent la cohabitation de ces type de champ ? Mon analyse est-elle fausse ?
Merci de votre assistance.

Publié:
03 Juin 2008 à 20:49
par Michaël TERRIEN
Je me sens seul pour le coup

(

Publié:
04 Juin 2008 à 09:30
par Stephane Maillard
Salut,
Effectivement ton problème est complexe et pas beaucoup de document la dessus. Qu'est ce que tu as dans le champs lecteur ?

Publié:
04 Juin 2008 à 15:56
par Michaël TERRIEN
Stephane Maillard a écrit:Salut,
Effectivement ton problème est complexe et pas beaucoup de document la dessus. Qu'est ce que tu as dans le champs lecteur ?
Une liste de chaine de texte :
- un groupe contenant des utilisateurs Notes parmi lesquels sont piochés les personnes renseignés danns le PublicEncryptionKeys
- "LocalDomainServers"
- "LocalDomainAdmins"
- le serveur de notre extranet d'un autre domaine sur laquelle est répliquée la base
- éventuellement un utilisateur d'un annuaire secondaire de l'autre domaine.
Ca ne doit pas simplifier le pbm...

Publié:
27 Juin 2008 à 10:54
par Michaël TERRIEN
Cela n'aide donc pas à comprendre le pbm...


Publié:
27 Juin 2008 à 12:39
par Jérome Deniau
D'abord vérifier si tous les intervenants ont bien une clé publique dans l'annuaire.

Publié:
27 Juin 2008 à 16:28
par Michaël TERRIEN
Jérôme Deniau a écrit:D'abord vérifier si tous les intervenants ont bien une clé publique dans l'annuaire.
Merci Jérôme pour cette piste mais tout le monde a bien une clé publique dans l'annuaire.
Par ailleurs, comme je l'ai indiqué, j'ai fait le test en créant un document avec un autre masque de la même base et avec les mêmes intervenants et cela fonctionne correctement... à partir du moment où il n'y a pas de champ lecteur dans le document.

Publié:
27 Juin 2008 à 16:53
par Jérome Deniau
Il faudrait voir le contenu du champ de type names et si les données (hors groupe) du champ lecteur est bien au format hiérarchique (CN=.......)
Les versions antérieures étaient plutôt permissives (notesviewEntries, etc....), la 8 nettement moins, donc il doti manquer quelque chose à mon avis....

Publié:
27 Juin 2008 à 16:58
par Jérome Deniau
Comme je ne veux pas me développer un truc, si tu as 2 documents et ton masque je suis preneur.....
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 10:07
par pivo
Hello,
Il n'y a jamais eu de solution pour ceci ? Je fais face au même problème.
Et 0 documentation...
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 10:17
par Michael DELIQUE
Salut
quelle est le souci ?
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 10:39
par pivo
Le souci... ça avait l'air simple quand j'ai regardé comment c'était fait chez un client. J'ai relevé les noms des champs "PublicEncryptionKeys", etc qu'ils utilisaient dans leur base et tout ça.
Revenu à mon bureau je développe une autre base pour eux, je mets les mêmes champs cachés, je crypte les champ à crypter, ils apparaissent en rouge, je me dis que c'est bon...
Et bien non. Tous les champs sont visibles et lisibles par mon utilisateur de test.
Dans PublicEncryptionKeys j'ai mis un compute when composed à @Username pour débuter, il y a bien mon nom dedans. J'ai également essayer de doubler l'encryption en rajoutant un SecretEncryptionKeys avec une clé que j'ai créé pour ça (j'ai lu sur un forum qu'il fallait les 2 pour forcer l'encryption) :
http://www-10.lotus.com/ldd/nd6forum.ns ... enDocumentJ'en suis à me demander s'il ne faut pas un réglage serveur spécifique pour y arriver. Donc y a-t-il qq part une marche à suivre... à suivre ?
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 11:21
par Michael DELIQUE
re,
pour un utilisateurs ayant les droits, les champs n'apparaitrons pas comme crypté.
tu travail sur quel version ? moi je suis en 8.5 et j'ai pas de souci.
concernant "PublicEncryptionKeys" il faut rajouté cette clé dans l'id des utilisateurs devant lire l'information. ce qui veux dire qu'elle peut être perdu. il faut la stocker dans un endroit sur.
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 12:27
par pivo
Je suis en 8.5 et 9 pour mes tests. Designer utilisé sur la 8.5.
C'est pas le serveur ni les ID, une vieille base que j'ai retrouvé avec ce mécanisme fonctionne (mêmes users de test, même serveur)
J'ai même copié-collé le champ en question d'un masque à l'autre (et donc d'une base à l'autre). Comparé les documents créés (1 sur lequel le cryptage marche, 1 sur lequel non) champ par champ, y a pas d'autre valeur cachée.
J'ai jamais autant ramé... vais peut-être tenter la traversée du Pacifique en solitaire à la rame...
Re: Chiffrement de champs avec clefs publiques

Publié:
16 Oct 2013 à 12:57
par Michael DELIQUE
je sais pas si ca va t'aider, mais voici deux fonction que j'utilise pour stocker les mots de passes. sur mes server en 8.5 ça fonctionne bien
- Code : Tout sélectionner
Public Function PasswordVaultGet(wID As String, wDBVault As NotesDatabase) As Variant
%REM
pour fonctionner les agents utilisant cette fonction doivent avoir le sevurity level a 2
%END REM
Dim DBVault As NotesDatabase
Dim Doc As NotesDocument
Dim vrValue As Variant
Dim Item As NotesItem
Dim lstPassword List As String
Dim i As Integer
Dim Tag As String
On Error GoTo CatchError
PasswordVaultGet = Null
If Trim(wID) = "" Then
Error 9999,"wID is Empty"
Exit Function
End If
If Session Is Nothing Then
Set Session = New NotesSession
End If
If wDBVault Is Nothing Then
Set DBVault = Session.Currentdatabase
Else
Set DBVault = wDBVault
End If
Set Doc = PasswordVaultDoc(UCase(Trim(wID)),DBVault)
If Not Doc Is Nothing Then
vrValue = Doc.Items
If IsArray(vrValue) = True Then
If IsEmpty(vrValue) = False Then
i=0
ForAll ValueItem In vrValue
Set Item = ValueItem
If Not Item Is Nothing Then
If UCase(Left(Trim(Item.Name),4)) = "PSW_" Then
i=i+1
Tag = StrRight(Trim(Item.Name),"PSW_")
lstPassword(Tag) = Item.Text
End If
Set Item = Nothing
End If
End ForAll
Select Case i
Case 0
PasswordVaultGet = Null
Case 1
PasswordVaultGet = lstPassword(Tag)
Case Else
PasswordVaultGet = lstPassword
End Select
Erase lstPassword
End If
End If
vrValue = Null
Set Doc = Nothing
End If
Exit Function
CatchError:
MsgBox "("+Structure_Log+" : "+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," Error !"
PasswordVaultGet = Null
Exit Function
End Function
Public Function PasswordVaultSet(wvrParam As Variant, wvrPassword As Variant, wDBVault As NotesDatabase) As Boolean
%REM enregistre les données des mots de passe, tous les parametres doivent être renseigné, pas d'update partielle
le tag de la list des mots de passe est utilisé pour créé les champs qui stock les mots de passe
pour fonctionner les agents utilisant cette fonction doivent avoir le sevurity level a 2
%END REM
Dim DBVault As NotesDatabase
Dim Doc As NotesDocument
Dim Item As NotesItem
Dim vrValue As Variant
Dim vrPublicKey As Variant
Dim nmUser As NotesName
Dim nbOK As Boolean
Dim Tag As String
Dim j As Integer
Const Separator = ";"
Const nbPublicEncryptionKeysMax = 100
On Error GoTo CatchError
PasswordVaultSet = False
If IsList(wvrParam) = False Then
Error 9999,"wvrParam is Not defined"
Exit Function
End If
If IsList(wvrPassword) = False Then
If DataType(wvrPassword) <> 8 Then
Error 9999,"wvrPassword is Not defined"
Exit Function
End If
End If
nbOK = False
ForAll ValuePSW In wvrPassword
If Trim(CStr(ValuePSW)) <> "" Then
nbOK = True
Exit ForAll
End If
End ForAll
If nbOK = False Then
Error 9999,"wlstParam is Empty"
End If
If IsElement(wvrParam("ID")) = False Then
Error 9999,"Tag 'ID' is not defined in wlstParam"
Exit Function
ElseIf Trim(wvrParam("ID")) = "" Then
Error 9999,"Tag 'ID' is Empty in wlstParam"
Exit Function
End If
nbOK = False
If IsElement(wvrParam("PUBLICENCRYPTIONKEYS")) = True Then
If Trim(wvrParam("PUBLICENCRYPTIONKEYS")) <> "" Then
nbOK = True
vrPublicKey = Split(wvrParam("PUBLICENCRYPTIONKEYS"),Separator)
End If
End If
If nbOK = False Then
If IsElement(wvrParam("SECRETENCRYPTIONKEYS")) = True Then
If Trim(wvrParam("SECRETENCRYPTIONKEYS")) <> "" Then
nbOK = True
End If
End If
End If
If nbOK = False Then
Error 9999,"No PublicEncryptionKeys and SecretEncryptionKeys"
Exit Function
End If
If Session Is Nothing Then
Set Session = New NotesSession
End If
If wDBVault Is Nothing Then
Set DBVault = Session.Currentdatabase
Else
Set DBVault = wDBVault
End If
Set Doc = PasswordVaultDoc(UCase(Trim(wvrParam("ID"))),DBVault)
If Doc Is Nothing Then
Set Doc = DBVault.Createdocument()
Call Doc.Replaceitemvalue("Form", "FRMPSWVAULT")
Call Doc.Replaceitemvalue("ID", UCase(Trim(wvrParam("ID"))))
Set Item = New NotesItem(Doc,"nmAuthorAdmin","[Admin]",AUTHORS)
Set Item = Nothing
Else
Call Doc.Replaceitemvalue("PublicEncryptionKeys", "")
Call Doc.Removeitem("PublicEncryptionKeys")
Call Doc.Replaceitemvalue("SecretEncryptionKeys", "")
Call Doc.Removeitem("SecretEncryptionKeys")
Call Doc.Replaceitemvalue("nmAuthors", "")
Call Doc.Removeitem("nmAuthors")
Call Doc.Replaceitemvalue("nmReaders", "")
Call Doc.Removeitem("nmReaders")
vrValue = Doc.Items
If IsArray(vrValue) = True Then
If IsEmpty(vrValue) = False Then
ForAll ValueItem In vrValue
Set Item = ValueItem
If Not Item Is Nothing Then
If UCase(Left(Trim(Item.Name),4)) = "PSW_" Then
Item.Values = Null
Call Item.Remove()
End If
Set Item = Nothing
End If
End ForAll
End If
End If
vrValue = Null
End If
If IsElement(wvrParam("SECRETENCRYPTIONKEYS")) = True Then
If Trim(wvrParam("SECRETENCRYPTIONKEYS")) <> "" Then
Call Doc.Replaceitemvalue("SecretEncryptionKeys",Trim(wvrParam("SECRETENCRYPTIONKEYS")))
End If
End If
j=0
If IsArray(vrPublicKey) = True Then
If IsEmpty(vrPublicKey) = False Then
Set Item = Doc.Getfirstitem("PublicEncryptionKeys")
If Item Is Nothing Then
Set Item = New NotesItem(Doc,"PublicEncryptionKeys","",NAMES)
Else
Item.values = Null
End If
Item.Isencrypted = False
ForAll Value In vrPublicKey
If Trim(CStr(Value)) <> "" Then
Set nmUser = New NotesName(Trim(CStr(Value)))
If Item.Contains(nmUser.Canonical) = False Then
j=j+1
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
End If
End ForAll
End If
End If
Set nmUser = New NotesName(Session.Username)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
j=j+1
End If
Set nmUser = New NotesName(Session.Effectiveusername)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
j=j+1
End If
Set nmUser = Nothing
Set Item = Nothing
If j > nbPublicEncryptionKeysMax Then
Set Doc = Nothing
Error 9999,"Too much PublicEncryptionKeys ("+CStr(j)+") maximum allowed : "+CStr(nbPublicEncryptionKeysMax)+". You risk : 'Notes error: Adding entry will cause text list to exceed 64K. Entry not added.'"
Exit Function
%REM
s'il ya trop de personne dans le champ 'PublicEncryptionKeys' même si le champ ne dépasse pas la taille autorisé.
lors de l'encryptage le champs va "contenir" les clés des utilisateurs et dépassé les 64k.
après test il semble que 100 membres maximum soit une limite acceptable
%END REM
End If
Set Item = Doc.Getfirstitem("nmAuthors")
If Item Is Nothing Then
Set Item = New NotesItem(Doc,"nmAuthors","",AUTHORS)
Else
Item.values = Null
End If
Item.Isencrypted = False
If IsElement(wvrParam("AUTHORS")) = True Then
If Trim(wvrParam("AUTHORS"))<> "" Then
vrValue = Split(wvrParam("AUTHORS"),Separator)
If IsArray(vrValue) = True Then
If IsEmpty(vrValue) = False Then
ForAll Value In vrValue
If Trim(CStr(Value)) <> "" Then
Set nmUser = New NotesName(Trim(CStr(Value)))
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
End If
End ForAll
End If
End If
vrValue = Null
End If
End If
Set nmUser = New NotesName(Session.Username)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = New NotesName(Session.Effectiveusername)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
If IsArray(vrPublicKey) = True Then
If IsEmpty(vrPublicKey) = False Then
ForAll Value In vrPublicKey
If Trim(CStr(Value)) <> "" Then
Set nmUser = New NotesName(Trim(CStr(Value)))
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
End If
End ForAll
End If
End If
Set Item = Nothing
Set Item = Doc.Getfirstitem("nmReaders")
If Item Is Nothing Then
Set Item = New NotesItem(Doc,"nmReaders","",READERS)
Else
Item.values = Null
End If
Item.Isencrypted = False
If IsElement(wvrParam("READERS")) = True Then
If Trim(wvrParam("READERS"))<> "" Then
vrValue = Split(wvrParam("READERS"),Separator)
If IsArray(vrValue) = True Then
If IsEmpty(vrValue) = False Then
ForAll Value In vrValue
If Trim(CStr(Value)) <> "" Then
Set nmUser = New NotesName(Trim(CStr(Value)))
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
End If
End ForAll
End If
End If
vrValue = Null
End If
End If
Set nmUser = New NotesName(Session.Username)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = New NotesName(Session.Effectiveusername)
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
If IsArray(vrPublicKey) = True Then
If IsEmpty(vrPublicKey) = False Then
ForAll Value In vrPublicKey
If Trim(CStr(Value)) <> "" Then
Set nmUser = New NotesName(Trim(CStr(Value)))
If Item.Contains(nmUser.Canonical) = False Then
Call Item.Appendtotextlist(nmUser.Canonical)
End If
Set nmUser = Nothing
End If
End ForAll
End If
End If
Set Item = Nothing
vrPublicKey = Null
If DataType(wvrPassword) = 8 Then
Tag = "PSW_"+UCase(Trim(wvrPassword("ID")))
Set Item = New NotesItem(Doc, Tag,CStr(wvrPassword))
Item.Isencrypted = True
Set Item = Nothing
Tag = ""
Else
ForAll i In wvrPassword
Tag = Trim(CStr(ListTag(i)))
If Tag <> "" Then
If Trim(wvrPassword(Tag)) <> "" Then
Set Item = New NotesItem(Doc, "PSW_"+UCase(Trim(CStr(Tag))),wvrPassword(Tag))
Item.Isencrypted = True
Set Item = Nothing
End If
End If
Tag = ""
End ForAll
End If
Call Doc.Encrypt()
Call Doc.Save(True,False)
Set Doc = Nothing
Set DBVault = Nothing
PasswordVaultSet = True
%REM
lstParam("PUBLICENCRYPTIONKEYS") = ""
lstParam("SECRETENCRYPTIONKEYS") = ""
lstParam("ID") = ""
lstParam("AUTHORS") = ""
lstParam("READERS") = ""
lstPassword(Login / identifant du mot de passe)
%END REM
Exit Function
CatchError:
MsgBox "("+Structure_Log+" : "+Cstr(GetThreadInfo (1))+" Call by "+Cstr(GetThreadInfo(10))+")"+Chr(10)+"Error " + CStr(Err) + " : "+Chr(10) + CStr(Error)+". "+Chr(10)+"Line # "+Cstr(Erl),16," Error !"
PasswordVaultSet = False
Exit Function
End Function