main #1
39
README.md
39
README.md
@@ -1,6 +1,4 @@
|
|||||||
# Sierra-Security
|
# Sierra Security
|
||||||
|
|
||||||
Sierra Security
|
|
||||||
|
|
||||||
<h3>Introduction</h3>
|
<h3>Introduction</h3>
|
||||||
|
|
||||||
@@ -10,8 +8,37 @@ Sierra Security is a verification system I plan to integrate across my systems.
|
|||||||
|
|
||||||
The code is designed to be pasted at the start of your program. There are many variations for this module. Ensure that you are downloading the correct one:
|
The code is designed to be pasted at the start of your program. There are many variations for this module. Ensure that you are downloading the correct one:
|
||||||
|
|
||||||
`sierra-security-combination-X-X-X`: Combination of uuid verification and generation. Do not use for locks
|
* `sierra-security-combination-x-x-x.py`: Combination of uuid verification and generation. **Do not use for locks.**
|
||||||
|
* `sierra-security-generation-x-x-x.py`: Generation only, suitable for portable "keychains".
|
||||||
|
* `sierra-security-verification-x-x-x.py`: Verification only, suitable for locks.
|
||||||
|
|
||||||
`sierra-security-generation-X-X-X`: Generation only, suitable for portable "keychains"
|
---
|
||||||
|
|
||||||
`sierra-security-verification-X-X-X`: verification only, suitable for locks
|
## V. A-2 Technical Enhancements & Hardening
|
||||||
|
|
||||||
|
Compared to the original A-1 logic, the **Version A-2** suite includes several critical security and cryptographic enhancements to prevent unauthorized access and forensic recovery across all P7MJ software.
|
||||||
|
|
||||||
|
### 1. Brute-Force Immunity (Hash Stretching)
|
||||||
|
* **The Upgrade**: Implements **50,000 rounds** of SHA-256 hashing (Hash Stretching). This forces the computer to perform significant mathematical work for every single guess.
|
||||||
|
* **Impact**: Even if an analyst identifies the 0-999 key range, testing all 1,000 keys would now take an automated script hours to complete. Since the ID expires every 15 minutes, brute-forcing is mathematically impossible.
|
||||||
|
|
||||||
|
### 2. Cryptographic Rolling Salt (Daily Expiration)
|
||||||
|
* **The Upgrade**: The internal cryptographic "base" of the program now shifts every 24 hours based on the current UTC date string.
|
||||||
|
* **How it Works**: The salt remains consistent for a 24-hour window. However, at 00:00 UTC, the date changes, causing the resulting UUIDs for the exact same keys to change entirely.
|
||||||
|
* **Impact**: If a master key or authorized UUID is leaked or captured by a listener today, it becomes **completely useless tomorrow**. This prevents long-term replay attacks.
|
||||||
|
|
||||||
|
### 3. Global Sync (UTC Persistence)
|
||||||
|
* **The Problem**: Standard local time varies by region, causing synchronization failures between a keychain and a target PC.
|
||||||
|
* **The Fix**: Synchronized to **Coordinated Universal Time (UTC)** using timezone-aware objects.
|
||||||
|
* **Impact**: Your keychain (phone/laptop) and your programs will always match perfectly, regardless of travel or geographical location.
|
||||||
|
|
||||||
|
### 4. Anti-Automation Delay
|
||||||
|
* **The Logic**: Added an artificial 1.5-second `time.sleep()` during the verification process.
|
||||||
|
* **Impact**: Limits the speed of manual or macro-based attempts. Combined with the 3-chance limit, automated "brute-force spam" is rendered ineffective.
|
||||||
|
|
||||||
|
### 5. Premium Visual Identity
|
||||||
|
* **Upgrade**: Switched to high-fidelity "Sierra Curvy" ASCII art and implemented ANSI color-coding (Blue/Green/Red/Yellow).
|
||||||
|
* **Impact**: Improved user experience and a professional, "elite" software feel.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Developed for All P7MJ Projects 2026*
|
||||||
|
|||||||
106
sierra-security-combination-v-a-2.py
Normal file
106
sierra-security-combination-v-a-2.py
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
import datetime
|
||||||
|
import hashlib
|
||||||
|
import uuid
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
# _____ _ _____ _ _
|
||||||
|
# / ___(_) / ___| (_) |
|
||||||
|
# \ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
# `--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
# /\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
# \____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
# __/ |
|
||||||
|
# Combination V. A-2 |___/
|
||||||
|
|
||||||
|
# --- ENABLE ANSI COLORS ON WINDOWS ---
|
||||||
|
if os.name == 'nt':
|
||||||
|
kernel32 = ctypes.windll.kernel32
|
||||||
|
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
|
||||||
|
|
||||||
|
# --- CONFIGURATION ---
|
||||||
|
BASE_SALT = "D9_fX92_kL0_pP_SECRET_INTERCEPTOR_TOKEN"
|
||||||
|
TIMEFRAME_MINUTES = 15
|
||||||
|
|
||||||
|
def get_rolling_salt():
|
||||||
|
"""Generates a salt that changes every 24 hours (UTC) to invalidate old keys."""
|
||||||
|
# Using timezone-aware UTC to prevent deprecation warnings
|
||||||
|
date_string = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d")
|
||||||
|
return f"{BASE_SALT}:{date_string}"
|
||||||
|
|
||||||
|
def get_time_token():
|
||||||
|
"""Returns a time string rounded to the timeframe (Uses UTC for global sync)."""
|
||||||
|
now = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
minutes = (now.minute // TIMEFRAME_MINUTES) * TIMEFRAME_MINUTES
|
||||||
|
rounded = now.replace(minute=minutes, second=0, microsecond=0)
|
||||||
|
return rounded.strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
||||||
|
def generate_sierra_id(user_key: str):
|
||||||
|
time_token = get_time_token()
|
||||||
|
salt = get_rolling_salt()
|
||||||
|
raw_payload = f"{salt}:{time_token}:{user_key}"
|
||||||
|
hash_result = raw_payload.encode()
|
||||||
|
for _ in range(50000):
|
||||||
|
hash_result = hashlib.sha256(hash_result).digest()
|
||||||
|
return str(uuid.uuid5(uuid.NAMESPACE_OID, hash_result.hex()))
|
||||||
|
|
||||||
|
def print_header(subtitle="Combination"):
|
||||||
|
os.system('cls' if os.name == 'nt' else 'clear')
|
||||||
|
print("\033[94m" + "="*80)
|
||||||
|
print(r"""
|
||||||
|
_____ _ _____ _ _
|
||||||
|
/ ___(_) / ___| (_) |
|
||||||
|
\ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
`--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
/\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
\____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
""" + f"--- {subtitle} V. A-2 ---".center(70))
|
||||||
|
print("="*80 + "\033[0m")
|
||||||
|
|
||||||
|
def verify_access():
|
||||||
|
print_header("Verification")
|
||||||
|
chances = 3
|
||||||
|
while chances > 0:
|
||||||
|
print(f"\n[!] Attempts remaining: \033[93m{chances}\033[0m")
|
||||||
|
user_key = input(" > Enter Secret Key: ").strip()
|
||||||
|
provided_uuid = input(" > Enter Time-Locked UUID: ").strip()
|
||||||
|
print("\n[*] \033[96mVerifying cryptographic integrity...\033[0m")
|
||||||
|
correct_uuid = generate_sierra_id(user_key)
|
||||||
|
time.sleep(1.5)
|
||||||
|
if provided_uuid == correct_uuid:
|
||||||
|
print("\n[+] \033[92mAccess Granted...\033[0m")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
chances -= 1
|
||||||
|
print("\n[-] \033[91mInvalid Key/UUID combination.\033[0m")
|
||||||
|
print("\n\033[41mCritical Failure: Access Denied.\033[0m")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def tool_menu():
|
||||||
|
while True:
|
||||||
|
print_header("Main Terminal")
|
||||||
|
print(f" \033[90mGlobal Sync (UTC): {get_time_token()}\033[0m\n")
|
||||||
|
print(" \033[1m[1]\033[0m Generate a UUID")
|
||||||
|
print(" \033[1m[2]\033[0m Verify a UUID")
|
||||||
|
print(" \033[1m[3]\033[0m Exit\n")
|
||||||
|
choice = input("Enter your choice > ").strip()
|
||||||
|
if choice == "1":
|
||||||
|
user_key = input("\n > Enter your secret key: ").strip()
|
||||||
|
print(f"\n [+] \033[92mGenerated UUID:\033[0m {generate_sierra_id(user_key)}\n")
|
||||||
|
input("Press Enter to return to menu...")
|
||||||
|
elif choice == "2":
|
||||||
|
if verify_access():
|
||||||
|
print("\n[✓] Entering Secure Shell...")
|
||||||
|
time.sleep(2)
|
||||||
|
elif choice == "3":
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
tool_menu()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n\033[91mProcess Terminated.\033[0m")
|
||||||
81
sierra-security-generation-v-a-2.py
Normal file
81
sierra-security-generation-v-a-2.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
import datetime
|
||||||
|
import hashlib
|
||||||
|
import uuid
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
# _____ _ _____ _ _
|
||||||
|
# / ___(_) / ___| (_) |
|
||||||
|
# \ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
# `--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
# /\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
# \____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
# __/ |
|
||||||
|
# Generation V. A-2 |___/
|
||||||
|
|
||||||
|
# --- ENABLE ANSI COLORS ON WINDOWS ---
|
||||||
|
if os.name == 'nt':
|
||||||
|
kernel32 = ctypes.windll.kernel32
|
||||||
|
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
|
||||||
|
|
||||||
|
# --- CONFIGURATION (Sync with Verification Script) ---
|
||||||
|
BASE_SALT = "D9_fX92_kL0_pP_SECRET_INTERCEPTOR_TOKEN"
|
||||||
|
TIMEFRAME_MINUTES = 15
|
||||||
|
|
||||||
|
def get_rolling_salt():
|
||||||
|
"""Generates a salt that changes every 24 hours (UTC)."""
|
||||||
|
date_string = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d")
|
||||||
|
return f"{BASE_SALT}:{date_string}"
|
||||||
|
|
||||||
|
def get_time_token():
|
||||||
|
"""Returns a time string rounded to the timeframe (UTC)."""
|
||||||
|
now = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
minutes = (now.minute // TIMEFRAME_MINUTES) * TIMEFRAME_MINUTES
|
||||||
|
rounded = now.replace(minute=minutes, second=0, microsecond=0)
|
||||||
|
return rounded.strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
||||||
|
def generate_sierra_id(user_key: str):
|
||||||
|
time_token = get_time_token()
|
||||||
|
salt = get_rolling_salt()
|
||||||
|
raw_payload = f"{salt}:{time_token}:{user_key}"
|
||||||
|
hash_result = raw_payload.encode()
|
||||||
|
for _ in range(50000):
|
||||||
|
hash_result = hashlib.sha256(hash_result).digest()
|
||||||
|
return str(uuid.uuid5(uuid.NAMESPACE_OID, hash_result.hex()))
|
||||||
|
|
||||||
|
def print_header(subtitle="Generation"):
|
||||||
|
os.system('cls' if os.name == 'nt' else 'clear')
|
||||||
|
print("\033[92m" + "="*80)
|
||||||
|
print(r"""
|
||||||
|
_____ _ _____ _ _
|
||||||
|
/ ___(_) / ___| (_) |
|
||||||
|
\ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
`--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
/\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
\____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
""" + f"--- {subtitle} V. A-2 ---".center(70))
|
||||||
|
print("="*80 + "\033[0m")
|
||||||
|
|
||||||
|
def tool_menu():
|
||||||
|
while True:
|
||||||
|
print_header("Generator")
|
||||||
|
print(f" \033[90mGlobal Sync (UTC): {get_time_token()}\033[0m\n")
|
||||||
|
print(" \033[1m[1]\033[0m Generate a UUID")
|
||||||
|
print(" \033[1m[2]\033[0m Exit\n")
|
||||||
|
choice = input("Enter your choice > ").strip()
|
||||||
|
if choice == "1":
|
||||||
|
user_key = input("\n > Enter your secret key: ").strip()
|
||||||
|
print(f"\n [+] \033[92mGenerated UUID:\033[0m {generate_sierra_id(user_key)}\n")
|
||||||
|
input("Press Enter to return to menu...")
|
||||||
|
elif choice == "2":
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
tool_menu()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n\033[91mProcess Terminated.\033[0m")
|
||||||
89
sierra-security-verification-v-a-2.py
Normal file
89
sierra-security-verification-v-a-2.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import datetime
|
||||||
|
import hashlib
|
||||||
|
import uuid
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import ctypes
|
||||||
|
|
||||||
|
# _____ _ _____ _ _
|
||||||
|
# / ___(_) / ___| (_) |
|
||||||
|
# \ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
# `--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
# /\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
# \____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
# __/ |
|
||||||
|
# Verification V. A-2 |___/
|
||||||
|
|
||||||
|
# --- ENABLE ANSI COLORS ON WINDOWS ---
|
||||||
|
if os.name == 'nt':
|
||||||
|
kernel32 = ctypes.windll.kernel32
|
||||||
|
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
|
||||||
|
|
||||||
|
# --- CONFIGURATION (Sync with Generation Script) ---
|
||||||
|
BASE_SALT = "D9_fX92_kL0_pP_SECRET_INTERCEPTOR_TOKEN"
|
||||||
|
TIMEFRAME_MINUTES = 15
|
||||||
|
|
||||||
|
def get_rolling_salt():
|
||||||
|
"""Generates a salt that changes every 24 hours (UTC)."""
|
||||||
|
date_string = datetime.datetime.now(datetime.timezone.utc).strftime("%Y%m%d")
|
||||||
|
return f"{BASE_SALT}:{date_string}"
|
||||||
|
|
||||||
|
def get_time_token():
|
||||||
|
"""Returns a time string rounded to the timeframe (UTC)."""
|
||||||
|
now = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
minutes = (now.minute // TIMEFRAME_MINUTES) * TIMEFRAME_MINUTES
|
||||||
|
rounded = now.replace(minute=minutes, second=0, microsecond=0)
|
||||||
|
return rounded.strftime("%Y-%m-%d %H:%M")
|
||||||
|
|
||||||
|
def generate_sierra_id(user_key: str):
|
||||||
|
time_token = get_time_token()
|
||||||
|
salt = get_rolling_salt()
|
||||||
|
raw_payload = f"{salt}:{time_token}:{user_key}"
|
||||||
|
hash_result = raw_payload.encode()
|
||||||
|
for _ in range(50000):
|
||||||
|
hash_result = hashlib.sha256(hash_result).digest()
|
||||||
|
return str(uuid.uuid5(uuid.NAMESPACE_OID, hash_result.hex()))
|
||||||
|
|
||||||
|
def print_header(subtitle="Verification"):
|
||||||
|
os.system('cls' if os.name == 'nt' else 'clear')
|
||||||
|
print("\033[91m" + "="*80)
|
||||||
|
print(r"""
|
||||||
|
_____ _ _____ _ _
|
||||||
|
/ ___(_) / ___| (_) |
|
||||||
|
\ `--. _ ___ _ __ _ __ __ _ \ `--. ___ ___ _ _ _ __ _| |_ _ _
|
||||||
|
`--. \ |/ _ \ '__| '__/ _` | `--. \/ _ \/ __| | | | '__| | __| | | |
|
||||||
|
/\__/ / | __/ | | | | (_| | /\__/ / __/ (__| |_| | | | | |_| |_| |
|
||||||
|
\____/|_|\___|_| |_| \__,_| \____/ \___|\___|\__,_|_| |_|\__|\__, |
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
""" + f"--- {subtitle} V. A-2 ---".center(70))
|
||||||
|
print("="*80 + "\033[0m")
|
||||||
|
|
||||||
|
def verify_access():
|
||||||
|
print_header("Access Control")
|
||||||
|
print(f" \033[90mGlobal Sync (UTC): {get_time_token()}\033[0m\n")
|
||||||
|
chances = 3
|
||||||
|
while chances > 0:
|
||||||
|
print(f"\n[!] Attempts remaining: \033[93m{chances}\033[0m")
|
||||||
|
user_key = input(" > Enter Secret Key: ").strip()
|
||||||
|
provided_uuid = input(" > Enter Time-Locked UUID: ").strip()
|
||||||
|
print("\n[*] \033[96mVerifying cryptographic integrity...\033[0m")
|
||||||
|
correct_uuid = generate_sierra_id(user_key)
|
||||||
|
time.sleep(1.5)
|
||||||
|
if provided_uuid == correct_uuid:
|
||||||
|
print("\n[+] \033[92mAccess Granted...\033[0m")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
chances -= 1
|
||||||
|
print("\n[-] \033[91mInvalid Key/UUID combination.\033[0m")
|
||||||
|
print("\n\033[41mCritical Failure: Access Denied.\033[0m")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
if verify_access():
|
||||||
|
print("\n[✓] Handshake Verified. Initializing.")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n\033[91mProcess Terminated.\033[0m")
|
||||||
|
sys.exit(1)
|
||||||
Reference in New Issue
Block a user