Method for authenticating users using double blind password
The double-blind password method enhances security by requiring sequential entry of two passwords without system feedback, significantly reducing the chances of successful guessing, addressing vulnerabilities in existing two-step authentication methods.
Patent Information
- Application Number
- PCT/BR2024/050349
- Authority / Receiving Office
- WO · WO
- Patent Type
- Applications
- Current Assignee / Owner
- Filing Date
- 2024-08-08
- Publication Date
- 2026-02-12
AI Technical Summary
Existing two-step authentication methods are vulnerable to brute-force attacks and require multiple devices, posing security risks due to user interface feedback that can reveal incorrect password attempts.
A double-blind password method where users enter two passwords sequentially without system feedback, requiring both to be correct in order to grant access, increasing security by making it difficult for attackers to guess both passwords.
The method significantly enhances security by reducing the likelihood of successful password guessing to 1 in 139 sextillion for common patterns, forcing attackers to sequentially attempt both passwords, thus minimizing vulnerabilities.
Smart Images

Figure 00000018_0000 
Figure 00000019_0000
Abstract
Description
User Authentication Method Using Double Blind Password Field of invention
[0001] Information technology sector.
[0002] Security sector Fundamentals of the invention
[0003] Many digital systems use user access control through two-step authentication. Existing two-step authentication methods consist of "something you know" (password, PIN, etc.) plus "something you have" (another system, another device, etc.).
[0004] Although considerably secure, these methods have some security flaws that can be exploited by an intruder ("hacker"), such as allowing a brute-force algorithm (a method by which a program tries successive random passwords until it finds the correct one) to identify whether the password is correct or not. Another flaw is the need for the user, sometimes, to use more than one device or another system, which can open up another vulnerability for the intruder to exploit.
[0005] The user authentication method described here, called "double blind pass," corrects the aforementioned flaws and is more scalable, since it can be easily implemented in both digital and physical systems, for both online and offline access.
[0006] The blind double password method consists of the user having to enter two passwords sequentially, without the system prompting any confirmation or rejection in the user interface. That is, the user enters the first password, sends it to the system, then enters the second password and sends it back to the system. The system only grants access, or proceeds to the next function, if both passwords are entered correctly, in the correct order. The system will not even process the first password until it is entered. The system checks the second password, and regardless of whether the first password is correct or incorrect, it does not revert any changes to its interface.
[0007] If the first password is entered correctly, but the second is incorrect, the login sequence is reset. In other words, the second password can only be accepted if the first one was entered immediately before it.
[0008] Therefore, an attacker who does not know both passwords beforehand, whether virtual or physical, is "in the dark." Without any feedback from the system, the attacker has no way of knowing if the first password is correct, so they cannot concentrate on the second.
[0009] The odds of guessing a single password between 8 and 12 characters, containing at least one uppercase letter, one lowercase letter, one digit, and one special character from among !, @, #, $, and % (a common set of rules for digital platforms) is 1 in 13,933,043,362,328,201,800 (almost 14 quintillion). Adding a PIN, or any form of auxiliary code with 4 numeric digits, after the password, the chance of correctly guessing both parameters is 1 in 139,330,433,623,282,018,000,000 (more than 139 sextillion). The same password pattern in the blind double-password method, without a subsequent PIN, increases the difficulty of guessing correctly to 1 in 19412969733651796286588061962152e+38.
[0010] Considering a purely numeric 4-digit password, which cannot contain a sequence of 3 digits, nor the repetition of 3 digits, nor the user's date of birth (as used by some banks and manufacturers of electronic locks), the odds of guessing correctly are 1 in 9,843. With a double blind password, the chance is 1 in 96,884,649.
[0011] The increased difficulty of guessing the password lies in the fact that there is no return beyond the execution of the next action (such as granting access) only when both passwords are correct and in direct sequence. This forces the attacker to guess both passwords sequentially. Adding to this is the fact that, for the second password, no matter how many attempts were made on the first, the counter needs to be reset, as the second password may or may not be among the errors of the first.
[0012] Finally, the calculations presented are based only on simple password patterns. The more complexity is added to the password, the greater the security of the two-factor password becomes, given the extremely low chances of guessing or brute force. Description of the invention
[0013] The blind double-password method is conceptually the same in all its applications, but may present some minor technical variations depending on the nature of the system to be protected. As a rule, the main variations of the method are in the application with or without user identification. The basic methodology of each application is:
[0014] Application with user ID (figure 1):
[0015] The administrator provides the user with an access interface (login page) containing a field to enter the user's identity ('ID'), a field for the password ('Password'), and a button to submit the data ('Submit').
[0016] The user fills in 'ID', 'Password' (their initial password), and then clicks the 'Submit' button. The system then initiates the following flow:
[0017] 1. Check if the 'ID' is in the user database. If it is not, the system only enables the 'Password' field on the user's login page. If the 'ID' exists, proceed to the next step.
[0018] 2. Checks if this user's first password has already been validated. Since this is the user's first login attempt, the answer can only be no, but this step is crucial in the loop. If the answer is no, proceed to the next step, Verify first password. If the answer is yes, meaning the user has already entered their first password, then skip two steps and proceed to Verify second password.
[0019] 3. Check initial password. The system verifies if the entered password matches the initial password registered in the table for this 'ID'. If positive, proceed to the next step. If negative, the system simply deletes the 'Password' field from the user's login page.
[0020] 4. Records the first password validation. The system internally registers that the first password was validated and clears the 'Password' field from the user's login page.
[0021] 5. Check the second password. If the system indicates that the first password has already been validated, it then checks if the new password entered matches the second password registered for this 'ID'. If so, the system grants the user access or initiates the next step for which it was configured. If the password is incorrect, it proceeds to the next step.
[0022] 6. Records the invalidation of the second password. If the new password entered is incorrect, the system modifies the previous record that validated the first password, so that if the user wants to try to log in again, they will have to enter the first password again. Finally, the system deletes the 'Password' field from the user's login page.
[0023] After entering the first password and submitting the data, the user's login page becomes available to receive the new password, regardless of the result of the first password. If the user entered the first password correctly, they must enter the second password this time.
[0024] When the new password (second password) is entered, the system restarts the entire process, assuming that the first password has already been validated.
[0025] In short, the user will only gain access if they provide the correct 'ID' and two correct passwords in the correct sequence. As long as at least one of these pieces of information is incorrect, the user remains in a loop with no response from the system.
[0026] Application without user ID (figure 2):
[0027] In cases where access does not require user identification, the mechanics are basically the same, but somewhat simplified. The system administrator provides the user with a keyboard to type the password ('Interface') and an audiovisual panel that emits a sound and a light signal ('Signal').
[0028] The user enters their first password in the 'Interface' and presses the submit button. The system then initiates the following flow:
[0029] 1. Checks if there is a record of the first password validation. If this is the user's first attempt, the answer can only be no, but this step is crucial in the loop. If the answer is no, the system moves to the next step. If it is yes, the system skips the next two steps and goes to step 4.
[0030] 2. Check if the first password is correct. The system checks if the entered password matches the first password registered. If the answer is yes, the system proceeds to the next step. If no, the system only emits a 'Signal'.
[0031] 3. Registers the validation of the first password. The system internally registers that the first password was validated and sends a 'Signal' to the user.
[0032] 4. Check if the second password is correct. If the answer to the first step is yes, the system checks if the entered password matches the second password registered. If so, the system grants the user access, or starts their activity, according to their configuration. If the second password is incorrect, the system proceeds to the next step in this flow.
[0033] 5. Registers the invalidation of the first password. The system modifies the previous record that validated the first password, so that if the user wants to try to access again, they will have to enter the first password again. Then, it issues a 'Signal' to the user.
[0034] Considerations regarding the application of the double-blind password method:
[0035] This method assumes a limit on the number of attempts, to be defined by the system administrator, with a suspension time also to be defined by the administrator. Within the "blind" concept, the suspension should also not be notified on the user interface page, but by external notification (email, SMS, messaging app, etc.). That is, a potential intruder will continue trying possible passwords, but they will not even be consulted.
[0036] If the user does not remember any of their passwords, the password reset process should be the same one already provided by the system administrator or device manufacturer. Examples of embodiments of the invention
[0037] Below is an example of applying the double-blind password method using Java. The system was created solely for practical testing of the method and consists of two classes:
[0038] Classe LoginApp.java (Interface digital com o usuário): package com.meusistema.testeDeDuplaSenhaCega; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt. event. A ctionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.sql.SQLException; import java, util.logging. Level; import java, util.logging. Logger; import javaxswing. border. EmptyBorder; import javaxswing. border. Border; public class LoginApp { private static JPasswordField passwordField; / / Variável de classe public static void main(String[] args) { Swingutilities JnvokeLater(LoginApp::createAndShowGUI); } private static void createAndShowGUlf) { / / Declaração das bordas das caixas de t5exto, para uso lá em baixo Border padding Border = new EmptyBorder l , 5, 1, 5); Border textFieldBorder = BorderFactory.createLineBorder(Color.BLACK); JFrame frame = new JFrame("Double Blind Password Test"); / / Creates the program window and the name in the title bar frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 300); frame.setLayout(new BorderLayoutO); frame.setResizable(false); JPanel panel = new JPanelf); / / Creates the panel within which the other elements will be inserted. panel.setLayout(new Gr id Bag Layout / )); General definitions of aesthetics and panel size GridBagConstraints constraints = new GridBagConstraintsQ; constraints, gridx = 0; constraints. gridy = 0; constraints.anchor = GridBagConstraints.CENTER; constraints.insets = new lnsets(10, 3, 10, 3); / / Label with the program title JLabel titleLabel = new JLabel("Double Blind Password Test"); titleLabel.setFont(new Font 'Tahoma', FontBOLD, 20)); constraints.gridwidth = 2; / / Centers the title, merging two cells panel.add(titleLabel, constraints); constraints.gridwidth = 1; / / Returns to having 1 cell for each element / / Creates the label for the user field constraints.gridy = 1; constraints.gridx = 0; JLabel usernameLabel = new JLabel("User:"); usernameLabel.setFont(new FontÇTimes New Roman", FontBOLD, 18)); panel.add(usernameLabel, constraints); / / Creates the field to insert the user constraints.gridy = 1; constraints.gridx = 1; JTextField usernameField = new JTextField(20); usernameField.setFont(new Font("Rubik", FontBOLD, 13)); usernameField.setBorder(BorderFactory.createCompoundBorder(textFieldBorder, paddingBorder)); panel. add(usernameField, constraints); / / Creates the label for the password field constraints.gridy = 3; constraints.gridx = 0; JLabel passwordLabel = new JLabel("Password:"); passwordLabel.setFont(new FontÇ imes New Roman", FontBOLD, 18)); panel.add(passwordLabel, constraints); / / Creates the password field constraints.gridy = 3; constraints.gridx = 1; passwordField = new JPasswordField(20); / / Initialization of the class variable passwordField.setFont(new Font("Rubik", FontBOLD, 13)); passwordField.setBorder(BorderFactory.createCompoundBorder(textFieldBorder, paddingBorder)); panel.add(passwordField, constraints); / / Creates the submit button constraints.gridwidth = 2; / / Merges two cells constraints.gridy = 5; JButton loginButton = new JButton("Login"); panel. add(loginButton, constraints); / / Method to trigger the submit button by simply pressing Enter anywhere ioginButton.addActionListener(new ActionListenerO { @Override public void actionPerformed(ActionEvent e) { try { performLogin(usernameFieid.getTextO, passwordFieid.getPasswordO); } catch (SQLException ex) { Logger.getLogger(LoginApp. class.getName()).log(Level.SEVERE, null, ex); } } }); / / Adiciona KeyListener para o campo de senha passwordField.addKeyListener(new KeyAdapterf) { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCodef) == KeyEvent.VK ENTER) { try { performLogin(usernameField.getTextO, passwordFieid.getPasswordO); } catch (SQLException ex) { Logger.getLogger(LoginApp.class.getNameO).log(Level. SEVERE, null, ex); } } } }); frame. add(panel, BorderLayout. CENTER); frame.setVisible(true); } / / Method to send the data to the other class and receive the user verification return private static void performLogin(String username, char[] password) throws SQLException { if (LoginChecker.isUserAllowed(username, password)) { passwordField.sefText"'); / / Clears the password field passwordField.requestFocusInWindowO; / / Sets the focus to the password field } else { / / JOptionPane.showMessageDialog(null, "Unauthorized user or incorrect password."); passwordField.sefText"); / / Clears the password field passwordField.requestFocusInWindowO; / / Sets focus on the password field } } }
[0039] Class LoginChecker.java (“Back-end” of the system): package com.meusistema.testeDeDuplaSenhaCega; import javax.swing.JOptionPane; import java.sql.Connection; import javasql. DriverManager; import javasql. PreparedStatement; import javasql.ResuitSet; import javasql.SQLException; public class LoginChecker { / / Declaration of variables for the database connection private static final String DBJJRL = "your_database"; / / Database private static final String DBJJSER = "your_username"; / / Database administrator user private static final String DB_PASSWORD = "your_password"; / / Database administrator password public static boolean isUserAllowed(String username, char[] password) throws SQLException { / / Method to verify the username and password try { Connection connection = DriverManager.getConnection(DB_URL, DBJJSER, DB_PASSWORD); String query = "SELECT libera, senhal, senha2 FROM usuários WHERE usuario = ?"; / / Query to retrieve data based on the user entered on the interface screen PreparedStatement preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, username); / / Inserting the user to be searched into the query ResultSet resultSet = preparedStatementexecuteQueryO; / / Retrieved the data from the user if (resultSetnextO) { boolean libera = resultSet.getBoolean("libera"); / / Checks if the first password release record ('libera') is true or false if (ill bera) { / / If the 'libera' column in the database is false, checks the first password String storedPassword = resultSet.getString("password1 "); String enteredPassword = new String(password); if(enteredPassword.equals(storedPassword)) { / / If the first password is correct / / Correct password, update 'release' to true String updateQuery = "UPDATE users SET libera = true WHERE user = ?"; PreparedStatement updateStatement = connection. prepareStatement(updateQuery); updateStatement.setString( 1, username); updateStatementeexecuteUpdateO; return true; } else { / / If the first password is wrong, nothing happens. } } else { / / If 'release' is true, it will check password2 and change 'release' String storedPassword = resultSet.getString("password2"); String enteredPassword = new String(password); if(enteredPassword.equals(storedPassword)) { / / If password2 is also correct / / Correct password, refresh 'unlock' again String updateQuery = "UPDATE users SET libera = false WHERE user = ?"; PreparedStatement updateStatement = connection.prepareStatement(updateQuery); updateStatement.setString(1, username); updateStatementexecuteUpdateO; showPopup("Access granted"); / / Confirmation popup for the user when both passwords are entered correctly in sequence, representing access being granted, or the next step in the system return true; } else { / / If password2 is wrong, 'release' returns to false String updateQuery = "UPDATE users SET libera = false WHERE user = ?"; PreparedStatement updateStatement = connection. prepareStatement(updateQuery); updateStatement.setString( 1, username); updateStatement.executeUpdate(); } } } resultset. closeO; preparedStatement. closeO; connection. close; } catch (SQLException e) { e.printStackTrace ; } return false; } private static void showPopup(String message) { / / Method to generate the Popup message for the user JOptionPane.showMessageDialog(null, message); } }
[0040] For the test, the MySQL database was used, with the following SQL to create the data table: CREATE DATABASE testedsc / *!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci * / / *!80016 DEFAULT ENCRYPTION='N' * / ; USE testedsc CREATE TABLE 'users' f id' int unsigned NOT NULL AUTOJNCREMENT, 'user' varchar(30) NOT NULL, password varchar(255) NOT NULL, password2' varchar(255) NOT NULL, liberate' tinyint(1) NOT NULL DEFAULT 'O', PRIMARY KEY ( id) ) ENGINE=lnnoDB AUTOJNCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLA TE=utf8mb4_0900_ai_ci;
[0041] To run the test, simply use the same code and populate the 'users' table with at least one user, with two passwords registered in their respective fields. The same methodology can be applied using other languages and databases.
Claims
CLAIMS 1. USER AUTHENTICATION METHOD BY DOUBLE BLIND PASSWORD, characterized by requiring 2 (two) passwords in sequence, returning to the user only the release of access.
2. BLIND USER LOCKOUT, according to claim 1, characterized by locking the user for a certain period of time, after a certain number of unsuccessful login attempts, without informing the user through the login interface.
Citation Information
Patent Citations
User Authentication Method Using Double Blind Password
BR102023016341A2
Simple two-factor authentication
US20070107050A1
Use of personal communication devices for user authentication
US6993658B1
Two phase password input mechanism
US9563756B2