2016-09-14 4 views
0

사용자가이 플랫폼에서 사용자 이름과 암호로 로그인 할 수있는 웹 응용 프로그램을 만들 것이라고 가정합니다 (사용자 이름과 암호를 보려고 MySQL 데이터베이스를 만들고 싶습니다).웹 응용 프로그램과 매력적인 암호

사용자가 로그온 한 후 사용자는 컴퓨터에서 파일을 선택하고 서버에서이 파일을 보냅니다.

이 파일을 사용자 그룹에 암호화합니다 (Charm Crypto와 HybridABE 암호화를 사용하고 싶습니다).

이제 건축/프로그래밍 관련 질문이 있습니다.

우리는이 프로그램이 있다고 가정하자 :

from charm.toolbox.pairinggroup import PairingGroup,GT 
from charm.adapters.abenc_adapt_hybrid import HybridABEnc as HybridABEnc 
from charm.schemes.abenc.abenc_waters09 import CPabe09 

group = PairingGroup('SS512') 
cpabe = CPabe09(group) 

hyb_abe = HybridABEnc(cpabe, group) 

policy = '((ONE or THREE) and (TWO or FOUR))' 

msg = "hello world this is an important message." 

(master_secret_key, master_public_key) = hyb_abe.setup() 

attr_list = ['THREE', 'ONE', 'TWO'] 

secret_key = hyb_abe.keygen(master_public_key, master_secret_key, attr_list) 

cipher_text = hyb_abe.encrypt(master_public_key, msg, policy) 

decrypted_msg = hyb_abe.decrypt(master_public_key, secret_key, cipher_text) 

내가 저장할 수를 마스터 개인 키 및 마스터 공개 키? 파일과 같은 디렉토리 서버에서? 데이터베이스에?

어디에서 사용자의 비밀 키를 저장할 수 있습니까?

답변

0

일반적으로 속성 기반 암호화 시스템은 한 번 생성되며 마스터 비밀 키와 공개 키 쌍이 하나만 있습니다.

  • 마스터 비밀 키는 사용자 비밀 키를 생성하는 서버에 저장됩니다. 대개 하나의 마스터 비밀 키가 있으므로이를 생성하여 서버 코드의 소스 코드에 넣을 수도 있습니다. 물론 서버 데이터베이스에 포함시킬 수 있습니다.
  • 사용자 비밀 키가 사용자에게 제공되어야합니다. 특정 사용자가 서버 측에 가지고있는 속성 목록을 관리 할 수 ​​있도록 사용자 비밀 키와 함께 사용자에게 일종의 (공개) 식별자를 제공해야합니다. 그렇지 않으면 새로운 사용자 비밀 키로 사용자에게 연락해야하기 때문에 속성을 업데이트하려고하면 두통이 생깁니다.
  • 마스터 공개 키 (일반적으로 "공개 매개 변수"또는 간단히 "공개 키"라고 함)는 공개입니다. 사용자에게 제공하는 패키지에 포함시키는 것이 좋습니다. 관심있는 "사용자"가 서버에 공개 키를 요청할 수 있도록 API 엔드 포인트를 작성할 수도 있습니다.
+0

간단하고 명확합니다. 한 가지 : 사용자 비밀 키를 사용자에게 부여해야한다고 말하면 어떻게 이러한 키를 보낼 수 있습니까? 그리고 어떻게이 키를 저장할 수 있습니까? 포인트 2의 예를 들어 주시겠습니까? – JLo

+1

키는 일반적으로 여러 값 (예 : 쌍 그룹의 요소)으로 구성됩니다. 이들은 별도로 바이트로 직렬화 할 수 있으며 Charm은 필요한 기능을 제공합니다 (http://stackoverflow.com/a/34447301/1816580). 이제는 여러 직렬화 된 값을 (파일) 형식으로 저장하는 것이 중요합니다. 이것을 할 수있는 수많은 방법이 있습니다. 직렬화 된 값을 네이티브 파이썬 유형 ([pickle it]) (https://docs.python.org/2/library/pickle.html) 만 사용하는 다른 객체에 넣을 수 있습니다. 자신 만의 파일 형식을 쓸 수 있습니다. Protobuf와 같은 것을 사용할 수 있습니다. –

+0

사용자가 마스터 공개 키로 데이터 클라이언트 측을 암호화 할 수있는 방법을 설명해 주시겠습니까? 나는 웹 앱을 개발 중이며, 어떻게 Charm Crypto (서버 측)에서 릴리스 된 키로 데이터를 암호화 할 수 있는지 모르겠습니다. JavaScript를 사용할 수 있습니까? (클라이언트 측 파이썬은 웹 앱이기 때문에 사용할 수 없다). 투어 지원에 감사드립니다. – JLo