NOCF : Encryption and Decryption Service

'Notes on a conditional form(N.O.C.F)'은 The 1975 앨범 제목이다.

🕊️ 만든이유

  • '릴리슈슈의 모든 것'에서 릴리어를 보고 멋지다고 생각했다.

  • 나무위키에서 누가 릴리어 번역 프로그램을 만들어놓은 것을 봤던 것 같다.

  • 마침 나도 기록은 하고있는데, 다른 사람이 읽지는 못했으면해서 그런 암호화 프로그램을 만들었다.

📢 Project 설명

📝 Notes on a conditional form

N.O.C.F is an easy and fun web application for encrypting and decrypting text. This site helps users keep their text confidential and communicate securely with others.

Key Features:

  1. Text Encryption: Encrypt your input text using the chosen encryption algorithm. The encrypted text can be safely stored or shared.

  2. Text Decryption: Restore the original text from the encrypted text. The key or algorithm used during encryption is required.

  3. Secret Notes: Encrypt personal notes to keep them secure.

Use Cases:

  • Secret Messages: Send confidential messages to friends or family.

  • Protect Personal Notes: Encrypt important personal notes for safe storage.

💥 Site Demo

💅🏻 Tech Stack

  • Flask(Python), PostgreSQL, React(Javascript), Docker

  • Time : 4hours

🔑 Logic

Custom Encryption and Decryption System

1. Introduction

This report presents an analysis of a custom encryption and decryption system implemented in Python. The system utilizes a combination of substitution ciphers, base64 encoding, and character shifting to secure text data. The code is designed to handle both ASCII and Korean characters, providing a versatile and culturally relevant encryption solution.

2. Overview of Components

The system is composed of several key components:

  • Substitution Table Generation and Management:

    • Generates a random substitution table mapping characters to shuffled counterparts.

    • Saves and loads the substitution table from a file.

  • Custom Encryption Algorithm:

    • Encrypts text by substituting characters, applying a shift based on the number of lines, reversing the text, and finally encoding it with base64.

  • Custom Decryption Algorithm:

    • Reverses the encryption process by decoding the base64, reversing the text, and then performing reverse substitution and shifting to recover the original message.

3. Detailed Code Analysis

3.1. Substitution Table Management

3.1.1. generate_substitution_table()

This function generates a substitution table for character substitution. It considers both ASCII printable characters (from space to tilde) and Korean characters (from ‘가’ to ‘힣’).

  • Steps:

    1. Character Collection: Collects all ASCII printable characters and Korean characters.

    2. Shuffling: Shuffles these characters randomly to create a substitution mapping.

    3. Mapping: Maps each character to a randomly chosen substitute character.

3.1.2. reverse_substitution_table(substitution_table)

This function creates a reverse mapping of the substitution table to facilitate decryption.

  • Purpose: Ensures that each substituted character can be correctly mapped back to its original form during decryption.

3.1.3. save_substitution_table(substitution_table, filename='substitution_table.pkl') and load_substitution_table(filename='substitution_table.pkl')

These functions handle the saving and loading of the substitution table using the pickle module.

  • Purpose:

    • Save Function: Serializes the substitution table and saves it to a file.

    • Load Function: Deserializes and loads the table from the file if it exists, allowing for persistent storage of the table.

3.2. Custom Encryption Algorithm

3.2.1. calculate_shift(text)

This function determines the shift value used in the encryption process.

  • Calculation: The shift is calculated based on the number of lines in the text, using the formula shift = text.count('\n') + 1. This adds an extra level of dynamic shifting based on the structure of the input text.

3.2.2. custom_encrypt(text, substitution_table)

This is the core encryption function.

  • Process:

    1. Shift Calculation: Determines the shift value from the input text.

    2. Character Substitution and Shifting: For each character in the text:

      • Applies the shift by adjusting the character’s Unicode value.

      • Substitutes the shifted character using the substitution table.

    3. Reversal: Reverses the entire encrypted text to add complexity.

    4. Base64 Encoding: Encodes the reversed text into base64 to ensure safe transmission and storage.

  • Output: The final encrypted text is a base64-encoded string.

3.3. Custom Decryption Algorithm

3.3.1. custom_decrypt(text, substitution_table)

This function reverses the encryption process to retrieve the original text.

  • Process:

    1. Base64 Decoding: Decodes the base64-encoded text to retrieve the reversed encrypted string.

    2. Reversal: Reverses the string back to its original order before reversal.

    3. Reverse Substitution and Shifting: For each character:

      • Applies the reverse substitution using the reverse substitution table.

      • Adjusts the character’s Unicode value by reversing the shift.

  • Output: The final output is the original, decrypted text.

4. Security and Considerations

4.1. Strengths

  • Multiple Layers of Security: The system combines multiple encryption techniques (substitution, shifting, reversal, base64 encoding), making it more resistant to simple attacks.

  • Handling of Multilingual Characters: The inclusion of Korean characters makes the encryption scheme culturally relevant and capable of handling diverse data.

4.2. Potential Weaknesses

  • Predictability of Shifting Mechanism: The shift is based on the number of lines, which could be predictable in some cases, potentially reducing security.

  • Substitution Table Persistence: If the substitution table is compromised, the entire encryption system could be vulnerable, highlighting the need for secure storage.

4.3. Usage Considerations

  • Performance: For large texts, the multiple layers of encryption could introduce significant computational overhead.

  • Scalability: The current system is well-suited for small to medium-sized text blocks, but scalability could be an issue for larger datasets or real-time applications.

5. Conclusion

The custom encryption and decryption system presented here offers a unique and multi-faceted approach to securing text data. While it effectively combines several encryption techniques, ensuring the security of the substitution table and considering potential optimizations for larger datasets would be essential for its broader application. This system is particularly useful for applications requiring the encryption of texts containing both ASCII and Korean characters, making it versatile in a globalized context.

🔐 Update

substitution table backup

  • admin용 json 파일 backup 및 restore 기능 추가

encoding update

  • 암호화 키 관리: 대체 테이블을 파일에 저장하는 대신, 암호화된 키를 사용하여 보다 안전하게 대체 테이블을 관리합니다.

  • 시프트 값 보호: 시프트 값을 암호화하거나 복잡하게 계산하여 예측 가능성을 줄입니다.

  • 입력 검증: 입력 텍스트를 검증하여 악의적인 코드 주입을 방지합니다.

  • 로그 및 모니터링: 로그를 추가하여 암호화 및 복호화 작업을 기록합니다.

Reference

1. 암호화 (Encryption)

암호화는 데이터 보안의 핵심 요소로, 데이터를 보호하기 위해 일반 텍스트 데이터를 암호 텍스트로 변환합니다.

  • 전송 중 암호화 (Encryption in Transit):

    • 데이터를 네트워크를 통해 전송할 때 암호화하여 도청 및 중간자 공격(man-in-the-middle attacks)으로부터 보호합니다.

    • SSL/TLS: HTTPS를 통해 웹 트래픽을 암호화하거나, VPN을 사용하여 안전한 통신을 보장합니다.

  • 저장 중 암호화 (Encryption at Rest):

    • 데이터를 디스크에 저장할 때 암호화하여, 물리적인 디스크 탈취나 해킹 시 데이터를 보호합니다.

    • 디스크 암호화: 전체 디스크 암호화(FDE, Full Disk Encryption) 또는 특정 파일이나 데이터베이스 필드 암호화.

    • 데이터베이스 암호화: 민감한 데이터를 보관하는 데이터베이스 컬럼 암호화.

2. 접근 제어 (Access Control)

접근 제어는 데이터에 접근할 수 있는 사람이나 시스템을 제한하는 기술입니다.

  • 인증(Authentication): 사용자나 시스템이 실제로 자신이라고 주장하는 주체인지 확인합니다. (예: 비밀번호, 2단계 인증, 생체 인식)

  • 인가(Authorization): 인증된 사용자가 어떤 데이터에 접근할 수 있는지 제어합니다. (예: 권한 관리, 역할 기반 접근 제어(RBAC))

  • 로그 및 모니터링 (Logging & Monitoring): 데이터 접근 및 사용에 대한 로그를 남기고, 이를 모니터링하여 이상 징후를 탐지합니다.

3. 데이터 마스킹 (Data Masking)

민감한 데이터를 숨기거나 가명 처리하여, 비인가된 사용자에게 민감 정보를 노출하지 않도록 합니다.

  • 정적 데이터 마스킹 (Static Data Masking): 실제 데이터를 마스킹된 값으로 교체하여 비생산 환경에서 사용.

  • 동적 데이터 마스킹 (Dynamic Data Masking): 실시간으로 데이터 조회 시 마스킹된 값을 반환하여 보안 유지.

4. 데이터 무결성 (Data Integrity)

데이터가 변경되지 않고 일관성을 유지하도록 보장하는 기술입니다.

  • 해시(Hashing): 데이터를 해시 함수로 처리하여 고유한 해시 값을 생성, 데이터 변조 여부를 확인할 수 있습니다.

  • 디지털 서명(Digital Signatures): 데이터와 함께 서명을 생성하여, 데이터의 출처와 무결성을 검증합니다.

5. 백업 및 복구 (Backup & Recovery)

데이터 손실에 대비해 정기적으로 데이터를 백업하고, 필요한 경우 데이터를 복구할 수 있는 계획을 세웁니다.

  • 오프사이트 백업: 물리적으로 다른 위치에 백업을 보관하여 자연 재해나 보안 사고 시 보호.

  • 중복성: 데이터를 여러 장소에 복사하여 저장함으로써 데이터 손실 위험을 줄임.

6. 데이터 삭제 (Data Disposal)

데이터의 보관 기간이 끝나거나 불필요해졌을 때, 안전하게 삭제하여 재사용되거나 복구되지 않도록 합니다.

  • 덮어쓰기(Overwrite): 데이터가 저장된 공간을 무작위 데이터로 덮어씁니다.

  • 물리적 파괴: 하드 디스크나 기타 저장 매체를 물리적으로 파괴하여 복구 불가능하게 만듭니다.

7. 컴플라이언스 및 규제 준수 (Compliance & Regulatory Adherence)

산업별, 국가별 데이터 보호 규정을 준수하는 것이 중요합니다.

  • GDPR (General Data Protection Regulation): 유럽연합에서 개인정보 보호를 위해 강제하는 규정.

  • HIPAA (Health Insurance Portability and Accountability Act): 미국에서 의료 정보 보호를 위해 강제하는 규정.

LargeBinary with pickle

Last updated