2013-12-17 17 views
8

Czy istnieje sposób, aby w jakiś sposób podpisać cyfrowo bieżący stan rekordu bazy danych lub określonego pola z certyfikatem konkretnego użytkownika lub poświadczeniem AD itp.? Muszę zaimplementować pewnego rodzaju zatwierdzenie na poziomie rekordu, w którym poprawność i ważność konkretnego pola lub pól lub wiersza jest podpisana kombinacją nazwy użytkownika/hasła lub z pewnym certyfikatem. Dane powinny być zawsze widoczne w rejestrze, wszystko, czego potrzebuję, to móc powiedzieć: kto i kiedy zatwierdził dane. Nie muszę zapobiegać zmianie stanu (blokowanie), tylko w celu sprawdzenia, czy bieżący stan został podpisany.Cyfrowe podpisywanie rekordu bazy danych SQL Server lub operacji wstawiania/aktualizacji

Odpowiedz

8

Można użyć SIGNBYASYMKEY-function aby utworzyć podpis przy użyciu klucza asymetrycznego:

DECLARE @id = 2; -- The primary key of the row we need to sign 
DECLARE @keyid = AsymKey_Id('KeyID_for_the_User'); 
DECLARE @keypw = N'pGFD4bb925DGvbd2439587y'; 
       -- Password the user entered to sign the values 
DECLARE @clear_text_data nvarchar(max); 
set @clear_text_data = function_that_returns_a_concatenation_of_the_columns(@id) 

UPDATE table 
SET signature = SignByAsymKey(@keyid, @clear_text_data, @keypw) 
WHERE id = @id; 
6

[Ujawnienie: Pracuję dla CoSign]

Jak standardowy podpis cyfrowy chcesz? Czy chcesz X.509 signature, "prawdziwą rzecz?"

Jeśli tak:

  1. serialize (spłaszczenie) pola danych w określonym, udokumentowane i powtarzalny sposób w buforze.
  2. użyć biblioteki podpisywania do podpisania bufora.
  3. Wynikowy podpis cyfrowy powinien być "odłączonym podpisem cyfrowym". Zalecanym standardem dla odłączonych podpisów jest .p7b file type - struktura cyfrowej podpisu PKCS # 7 bez danych.
  4. Przechowuj odłączony podpis cyfrowy jako dodatkowe pole w rekordzie DBMS.

Potrzebny będzie również zapewnienie Weryfikacja podpis obsługę, aby zapewnić osobie (lub urządzenia), że dane nie został zmieniony, ponieważ został podpisany i że tożsamość osoby podpisującej jest zaufany:

  1. Korzystając z tego samego algorytmu co powyżej, przekształcić dane do bufora
  2. Zadzwoń do metody weryfikacji biblioteki podpisu.

Jeśli chcesz poprawić możliwości audytu systemu, należy włączyć szeregowanie danych i podpis zewnętrzny do pobrania. Umożliwi to sprawdzenie kontroli: użycie oprogramowania stron trzecich w celu powielenia działania oprogramowania do weryfikacji.

Najlepiej byłoby, gdyby zserializowana wersja danych była łatwa do sprawdzenia, czy pasuje do danych tekstowych. Na przykład serializacji do formatu json, csv lub xml utf-8 zamiast formatu binarnego. Każdy pakiet bitów może być podpisany, ale zwykły format tekstu będzie dużo łatwiej poddać kontroli.

Jeśli chcesz także biblioteka podpisanie obsłużyć wszystkich kwestii bezpieczeństwa prawidłowo ochrony kluczy prywatnych podpisującego, sprawdź CoSign SAPI APIs.

Pamiętaj, że przechowywanie kluczy prywatnych sygnatariuszy w pliku w systemie plików oznacza, że ​​ogólny Aplikacja to , a nie, dostarczając dowód podpisu. Jedynym sposobem na przedstawienie prawdziwego dowodu podpisu jest użycie bezpiecznego urządzenia do tworzenia podpisu (SSCD). Łatwym sposobem jest użycie numeru CoSign Central signing appliance lub podobnego.Główną alternatywą są karty inteligentne, które mogą być trudne do wdrożenia w środowisku klient/serwer/przeglądarka internetowa.

+0

Dziękuję za drobiazgową odpowiedź, a także za cenne tło. Niestety w tym przypadku nie wolno mi używać żadnych aktywów stron trzecich, więc jestem zobowiązany zaakceptować odpowiedź @ Twinkles z powodu podejścia opartego wyłącznie na SQL Server. Ale i tak dzięki. –