2014-12-02 3 views
2

업로드 된 파일을 서버 (/ 미디어)에 저장하기 전에 사용자가 제공 한 키로 암호화 된 Django 웹 사이트를 구현하고 있습니다. 사용자가 키를 보려고 할 때 키를 입력하라는 메시지가 나타나고 암호화 된 파일이 해독 된 다음 표시됩니다. 내 질문은 그래서, 보안에 비교적 새로운 오전Django 암호화 키 무결성

from Crypto import Random 
from Crypto.Cipher import AES 
from Crypto.Hash import SHA256 


def encryption_pad(string): 
    pad = b"\0" * (AES.block_size - len(string) % AES.block_size) 
    padded_string = string + pad 
    return padded_string 

def encrypt_file(key, file): 
    with open(file, 'rb') as out: 
     byte_output = out.read() 

    hash = SHA256.new() 
    hash.update(key) 

    byte_output = encryption_pad(byte_output)  
    initialization_vector = Random.new().read(AES.block_size) 
    cipher = AES.new(hash.digest(), AES.MODE_CBC, initialization_vector) 
    encrypted_output = initialization_vector + cipher.encrypt(byte_output) 

    with open(file + ".enc", 'wb') as out: 
     out.write(encrypted_output) 

def decrypt_file(file, key): 
    with open(file, 'rb') as input: 
     ciphertext = input.read() 

    hash = SHA256.new() 
    hash.update(key) 

    initialization_vector = ciphertext[:AES.block_size] 
    cipher = AES.new(hash.digest(), AES.MODE_CBC, initialization_vector) 
    decrypted_output = cipher.decrypt(ciphertext[AES.block_size:]) 
    decrypted_output = decrypted_output.rstrip(b"\0") 

    with open(file[:-4], 'wb') as output: 
     output.write(decrypted_output) 

: 여기 내 암호화/해독 파일 코드의 키가 일정 시간 동안 서버의 메모리에 존재해야이 설정을 위해, 그래서 적절한 방법은 무엇입니까 내 views.py 함수를 모듈로 전달한 다음 적절히 처리해야합니까?

답변

2

파이썬에서 메모리 내 개체를 안전하게 처리하는 방법에 대한 기존 질문이 있습니다 (herehere 참조).

보안이 중요하다면 클라이언트에서 암호화 및 암호 해독을 수행하는 자바 스크립트로 더욱 안전한 옵션을 고려할 수 있습니다. 그렇게하면 키는 절대 유선을 통해 전송되지 않으며 서버에 존재하지 않습니다. 이것이 LastPass가 작동하는 방식입니다.

+0

설명과 참조에 큰 도움을 주셔서 감사합니다. – Kdawg