Secure Your Team's Digital Assets
PassNest provides enterprise-level password management with high-grade encryption, ensuring your team's credentials remain protected and accessible.
Live Password Vault Demo
Experience how PassNest securely manages your team's credentials with encrypted storage and controlled access
Google Workspace
accounts.google.comAWS Console
console.aws.amazon.comLinkedIn Business
linkedin.comESXi Host
192.168.10.25Complete Data Isolation for Each Tenant
Our multi-tenant architecture ensures complete data isolation with tenant-specific subdomains and encrypted data separation.
# Create tenant-specific subdomain sudo certbot --nginx -d yourcompany.passnest.com # Configure tenant isolation cat /etc/nginx/sites-available/yourcompany.passnest.com server { listen 443 ssl; server_name yourcompany.passnest.com; # Set tenant ID from subdomain set $tenant_id "yourcompany"; # Forward to app with tenant context location / { proxy_set_header X-Tenant-ID $tenant_id; proxy_pass http://127.0.0.1:8080; } }
Isolated Access Points
Each organization gets a dedicated subdomain (yourcompany.passnest.com) that serves as a unique identifier. This ensures that all data and sessions are bound to your specific tenant, preventing any cross-tenant data leakage. When users log in through your subdomain, our system validates the tenant context and only allows access to data within your organization's boundaries.
# Generate tenant-specific encryption keys function generateTenantKeys($tenantId) { # Derive unique master key for tenant $masterKey = hash_pbkdf2( "sha256", $_ENV['MASTER_KEY'], $tenantId, 100000, 32, true ); # Generate data encryption key $dataKey = random_bytes(32); $encryptedDataKey = openssl_encrypt( $dataKey, "aes-256-gcm", $masterKey ); return [ 'master_key' => $masterKey, 'data_key' => $dataKey, 'encrypted_data_key' => $encryptedDataKey ]; }
Zero-Knowledge Encryption
All sensitive data is encrypted using tenant-specific encryption keys derived from your unique tenant ID. Even with direct database access, your data remains unreadable without your tenant's encryption keys. This zero-knowledge architecture ensures that even PassNest administrators cannot access your organization's passwords or sensitive information.
# Domain-based access validation function validateTenantAccess($email, $tenantId) { # Extract domain from email $emailDomain = substr($email, strpos($email, '@') + 1); # Get allowed domains for tenant $allowedDomains = getTenantAllowedDomains($tenantId); # Check if email domain matches tenant domain if (in_array($emailDomain, $allowedDomains)) { return true; } # Log unauthorized access attempt logSecurityEvent('DOMAIN_MISMATCH', [ 'email' => $email, 'tenant_id' => $tenantId, 'email_domain' => $emailDomain ]); return false; }
Verified Email Domain Security
Our tenant access is also based on matching tenant allowed domains. For example, client.passnest.com will only accept logins from username@client.com domain. This additional layer of security ensures that only users with verified email domains can access your organization's data. When a user attempts to log in, our system validates that their email domain matches the allowed domains for that tenant, preventing unauthorized access even if credentials are compromised.
# Zero-knowledge encryption process function encryptPassword($password, $userId, $tenantId) { # Generate user-specific salt $userSalt = getUserSalt($userId); # Derive user key from master password $userKey = hash_pbkdf2( "sha256", $_SESSION['master_password'], $userSalt, 100000, 32, true ); # Get tenant-specific encryption key $tenantKey = getTenantEncryptionKey($tenantId); # Create combined key for encryption $encryptionKey = $userKey . $tenantKey; # Encrypt password before storage $iv = random_bytes(16); $encrypted = openssl_encrypt( $password, "aes-256-gcm", $encryptionKey, OPENSSL_RAW_DATA, $iv, $tag ); # Store encrypted data with metadata return [ 'encrypted_data' => base64_encode($iv . $tag . $encrypted), 'user_id' => $userId, 'tenant_id' => $tenantId ]; }
Maximum Security Through Encryption
Our encryption process ensures that passwords are encrypted before they're stored and can only be decrypted by the password owner within their tenant context. We cannot see your passwords because they're encrypted using a combination of your user key and tenant-specific encryption key. Even with direct database access, your passwords remain unreadable without both keys. This zero-knowledge architecture means only you can access your passwords, providing the highest level of security for your organization's sensitive credentials.
PassNest vs Traditional Methods
See why modern teams are switching from insecure methods to enterprise-grade password management.
| Features |
Traditional Excel File Method
|
PassNest
|
|---|---|---|
| Encryption | None or basic | 256-bit AES |
| Access Control | Everyone sees everything | Granular permissions |
| Audit Trail | No tracking | Complete activity logs |
| Two-Factor Auth | Not available | Built-in 2FA |
| Breach Monitoring | No alerts | Real-time notifications |
| Password Generator | Manual creation | Strong passwords |
| Secure Sharing | Email or chat | Encrypted sharing |
Multi-Layered Security Architecture
Our comprehensive security infrastructure protects your most sensitive data with multiple layers of protection.
End-to-End Encryption
Your data is encrypted on your device before transmission using AES-256-GCM, ensuring maximum security. Even we cannot access your passwords.
function encryptPassword($password, $userKey) {
$salt = random_bytes(16);
$key = hash_pbkdf2("sha256", $userKey, $salt, 100000, 32, true);
$iv = random_bytes(16);
$encrypted = openssl_encrypt($password, "aes-256-gcm", $key, OPENSSL_RAW_DATA, $iv, $tag);
return base64_encode($salt . $iv . $tag . $encrypted);
}
Two-Factor Authentication
Add an extra layer of security with 2FA support for all team members and admin accounts. Compatible with all major authenticator apps.
function verify2FA($userId, $code) {
$user = getUserById($userId);
$secret = $user['2fa_secret'];
$verified = $this->google2fa->verifyKey($secret, $code);
if ($verified) {
$this->logSuccessfulAuth($userId);
return true;
}
return false;
}
Secure Password Sharing
Share passwords without revealing the actual credentials to team members with controlled access and permission levels.
function sharePassword($passwordId, $recipientId, $permissions) {
$password = getPasswordById($passwordId);
$recipientKey = getUserPublicKey($recipientId);
$encryptedAccess = openssl_encrypt(
$password['encrypted_data'], "aes-256-gcm", $recipientKey, OPENSSL_RAW_DATA
);
createSharedAccess($passwordId, $recipientId, $encryptedAccess, $permissions);
}
Breach Monitoring
Get alerted if any of your passwords are compromised in a data breach with real-time notifications and password change recommendations.
function checkForBreaches($passwordHash) {
$hashPrefix = substr($passwordHash, 0, 5);
$apiUrl = "https://api.pwnedpasswords.com/range/" . $hashPrefix;
$response = file_get_contents($apiUrl);
$hashes = explode("\r\n", $response);
$hashSuffix = strtoupper(substr($passwordHash, 5));
foreach ($hashes as $hash) {
if (strpos($hash, $hashSuffix) !== false) {
return true; # Password found in breach database
}
}
return false;
}
Activity Logs
Complete audit trail of all password access and modifications for compliance and security. Track who accessed what and when.
function logActivity($userId, $action, $resourceId, $details = []) {
$logEntry = [
'user_id' => $userId,
'action' => $action,
'resource_id' => $resourceId,
'ip_address' => $_SERVER['REMOTE_ADDR'],
'user_agent' => $_SERVER['HTTP_USER_AGENT'],
'timestamp' => date('Y-m-d H:i:s'),
'details' => $details
];
$this->db->insert('activity_logs', $logEntry);
}
IP Restrictions
Limit access to specific IP ranges or geographic locations for enhanced security control and compliance with data residency requirements.
function checkIPRestrictions($userId) {
$user = getUserById($userId);
$tenantId = $user['tenant_id'];
$restrictions = getTenantIPRestrictions($tenantId);
$currentIP = $_SERVER['REMOTE_ADDR'];
if (empty($restrictions)) return true;
foreach ($restrictions as $range) {
if (ip_in_range($currentIP, $range['start_ip'], $range['end_ip'])) {
return true;
}
}
return false;
}
Ready to Secure Your Team's Passwords?
Join thousands of companies that trust PassNest to keep their digital assets secure with our flat-rate pricing model.