A security feature working once is not very interesting.
The more important question is:
What happens when everything goes wrong?
That's the question that changed how I test ATLOCK v4, my Windows security suite.
π Try ATLOCK v4:
https://github.com/Akhouri-Anmol-Kumar/ATLOCK
The Happy Path Is Easy
Most application testing starts like this:
Input
β
Function
β
Expected Result
β
β
PASS
For example:
Enter correct password
β
Vault unlocks
β
Success
Great.
But security software doesn't live exclusively on the happy path.
Real systems look more like:
REQUEST
β
βββββββββββ΄ββββββββββ
β β
SUCCESS FAILURE
β β
βΌ βΌ
Continue What happens now?
β
βββββββββββΌββββββββββ
βΌ βΌ βΌ
Retry Abort Recover
That last branch is where things get interesting.
π§ͺ 1. Password Vault: What If Authentication Fails?
ATLOCK's Password Vault uses:
Fernet
PBKDF2-HMAC-SHA256
200,000 PBKDF2 iterations
The obvious test is:
Correct password β vault opens.
But that's only one test.
I also care about:
Wrong password
β
Authentication failure
β
Vault remains locked
β
No plaintext data exposed
β
User receives clear feedback
The important security property isn't merely that the correct password works.
It's that the incorrect password doesn't accidentally produce an unsafe state.
π Cryptography Doesn't Remove Application-Level Bugs
This is something I think developers sometimes overlook.
You can use a strong cryptographic primitive and still build insecure application logic around it.
Conceptually:
CRYPTOGRAPHY
β
βΌ
Protects the data
β
βΌ
βββββββββββββββββββββββ
β Application Logic β
ββββββββββββ¬βββββββββββ
β
βββββββββ΄ββββββββ
βΌ βΌ
Correct Bug
β β
βΌ βΌ
Safe flow Unsafe flow
Using encryption doesn't automatically make everything surrounding it secure.
You still have to think about:
key derivation
authentication
input handling
state management
error handling
file handling
memory handling
access control
That's why security engineering is much bigger than choosing an encryption algorithm.
π‘οΈ 2. File Guard: Permissions Can Fail
ATLOCK's File Guard works with NTFS ACLs.
The normal workflow is simple:
Select file
β
Apply protection
β
ACL changes
β
File becomes protected
But Windows doesn't guarantee that every permission operation will succeed.
There can be:
insufficient privileges
unusual ownership
inherited permissions
conflicting ACL entries
filesystem issues
invalid targets
unexpected Windows configurations
So the real workflow needs to account for:
ACL OPERATION
β
ββββββββββ΄βββββββββ
βΌ βΌ
SUCCESS FAIL
β β
βΌ βΌ
New state Error handling
β
βΌ
User feedback
The dangerous assumption would be:
βThe function returned, therefore the security operation succeeded.β
No.
The resulting system state is what matters.
π§ 3. State Matters More Than Buttons
One of the biggest changes in my thinking was moving from:
βDoes this button work?β
to:
βWhat state is the application in after this button is pressed?β
For example:
LOCKED
β
β correct authentication
βΌ
UNLOCKED
But what about:
LOCKED
β
β wrong authentication
βΌ
LOCKED
That's obvious.
Now consider:
LOCKED
β
β unexpected exception
βΌ
???
That ??? is where testing becomes useful.
A security application should have defined failure states, not accidental ones.
πΈ 4. Intruder Ops: Hardware Is Unpredictable
Intruder Ops introduced another category of failure:
external hardware.
ATLOCK uses OpenCV's:
cv2.VideoCapture
for webcam access.
The basic concept is straightforward.
The real world isn't.
The camera might:
Camera requested
β
βββ Camera available
β β
β Capture
β
βββ Camera busy
β β
β Failure
β
βββ Camera missing
β β
β Failure
β
βββ Initialization problem
β
Failure
A security event shouldn't turn into:
Application stopped responding.
That's why hardware-dependent operations need to be treated as potentially slow and failure-prone.
β‘ 5. Don't Let Security Operations Freeze the UI
This became one of the practical lessons from working with webcam capture.
Imagine:
Security Event
β
Initialize Camera
β
Wait...
β
Wait...
β
UI freezes
That's terrible UX.
And it's especially bad in security software because the application may be trying to respond to the very event that caused the operation.
The better architecture is conceptually:
SECURITY EVENT
β
ββββββββββ΄βββββββββ
βΌ βΌ
UI / State Capture Task
β β
β βΌ
β Camera I/O
β β
βΌ βΌ
Responsive UI Result
β
βΌ
Local Storage
The exact implementation details matter, but the principle is simple:
Slow external operations shouldn't unnecessarily block the main interface.
π 6. What If the Alert System Fails?
Another easy assumption:
Intrusion event
β
Play alarm
β
Done
But audio is also an external dependency.
What if:
audio is disabled?
the device isn't available?
the configured sound can't be loaded?
the user has changed the output device?
A security workflow shouldn't collapse just because an optional notification mechanism failed.
So I think about alerts as:
Security Event
β
βββ Audio
β
βββ Notification
β
βββ Evidence
rather than:
Security Event β ONE action
That distinction makes the overall system more resilient.
π» 7. Portable Software Creates Its Own Testing Problems
ATLOCK is designed as a portable Windows application.
That's convenient for users.
But portability means I can't assume:
My machine = User's machine
A user's environment might have:
different Windows configuration
different permissions
different hardware
different camera devices
different audio devices
different filesystem contents
different security policies
So every assumption about the environment is potentially a test case.
π§© 8. The βWorks on My PCβ Problem
This is probably one of the oldest software problems.
Developer:
βIt works perfectly.β
User:
βIt doesn't.β
Both can be correct.
Because:
Developer Environment
β
User Environment
For ATLOCK, that difference matters even more because some components interact directly with Windows.
That's why I increasingly prefer asking:
What assumptions does this feature make about the machine?
rather than:
Does it work on my laptop?
π 9. Testing Security Boundaries
Another area I'm becoming more interested in is security boundaries.
For every feature, I want to identify:
ββββββββββββββββββββββββββββββ
β ATLOCK CONTROL β
ββββββββββββββββββββββββββββββ€
β β
β What ATLOCK controls β
β β
ββββββββββββββββββββββββββββββ€
β OS BOUNDARY β
ββββββββββββββββββββββββββββββ€
β β
β What Windows controls β
β β
ββββββββββββββββββββββββββββββ€
β HARDWARE BOUNDARY β
ββββββββββββββββββββββββββββββ€
β β
β What hardware controls β
β β
ββββββββββββββββββββββββββββββ
This prevents a dangerous engineering mistake:
assuming the application controls something that it actually doesn't.
π§ 10. Security Claims Need Boundaries
I don't want ATLOCK to become another project that says:
βMilitary-grade security.β
without explaining what that actually means.
I'd rather describe the system precisely.
For example:
NTFS ACL-based protection
is much more meaningful than:
βMilitary-grade file security.β
Likewise:
Fernet + PBKDF2-HMAC-SHA256
is a technical implementation detail.
It doesn't mean:
βNobody can ever access your data.β
Good security communication should explain capabilities and limitations.
π§ͺ 11. My New Testing Loop
My testing mindset now looks more like:
BUILD
β
βΌ
TEST
β
βΌ
BREAK IT
β
βΌ
Find the assumption
β
βΌ
Fix the design
β
βΌ
TEST AGAIN
β
βββββββββββββββ
βΌ
BUILD
The βbreak itβ step is the most interesting one.
Because that's where you discover things you didn't know you had assumed.
π₯ 12. The Bug Is Often More Valuable Than the Feature
This sounds counterintuitive.
But sometimes a bug teaches me more than successfully implementing an entire feature.
A feature tells you:
βThis works.β
A bug asks:
βWhy did you think this would work?β
That second question is much more valuable.
Because it forces you to inspect:
assumptions
state transitions
dependencies
boundaries
error handling
architecture
And that knowledge carries over into the next feature.
π What ATLOCK Is Becoming
ATLOCK started as a Windows security application.
But while building it, it has also become something else:
a practical security engineering laboratory.
Every module exposes a different class of problem.
File Guard
β
Windows authorization
Password Vault
β
Cryptography + authentication
Intruder Ops
β
Hardware + event handling
Desktop Lockdown
β
Application/system interaction
Local-first architecture
β
Privacy + data minimization
And connecting all of those pieces into one application creates problems that a tutorial rarely prepares you for.
π§ What's Next?
There are still plenty of areas I want to improve:
More extensive Windows compatibility testing
Better failure-state recovery
More rigorous threat modeling
More defensive validation
Better permission-state handling
More robust camera failure handling
Cleaner internal module boundaries
Better automated testing
More transparent security-state feedback
ATLOCK v4 isn't the final answer.
It's another iteration.
Final Thought
I've stopped measuring a security feature only by whether it works.
Now I ask:
What happens when it doesn't?
Because that's where the real engineering begins.
A security system isn't defined only by its strongest path.
It's also defined by how gracefully it handles:
failure, uncertainty, unexpected input, unavailable hardware, permission problems, and assumptions that turned out to be wrong.
That's what I'm trying to build with ATLOCK.
Not software that looks secure.
Software whose security decisions I can actually explain.
π ATLOCK v4 β Akhouri Systems
π Try it / inspect the project:
https://github.com/Akhouri-Anmol-Kumar/ATLOCK
If you use Windows, I'd genuinely appreciate technical feedback.
Don't just tell me what works.
Tell me what breaks.
ATLOCK
"We Build What Others Forgot To Fix"
Top comments (0)