コード例 #1
0
    def login(cls, username, password, timestamp_array):
        time_array = []
        for i in range(len(timestamp_array) - 1):
            time_array.append(
                float(timestamp_array[i + 1] - timestamp_array[i]) /
                float(1000))

        print(time_array)
        # Fetch user
        user = User.fetch_by_username(username=username)

        if not user:
            return Response(code=400, message='Invalid Username')

        # Fetch Password object
        password = Password.fetch_by_userid(userid=user.id, password=password)

        if not password:
            return Response(code=400, message='Invalid Password')

        # Fetch Password Analytics
        password_analytics = PasswordAnalytics.fetch_by_password_id(
            password_id=password.id)

        # Get statistics of user input
        sample_stats = Statistics(data_list=time_array)
        sample_stats.compute_all()

        # Get statistics of existing inputs
        population_mean = Statistics.mean(password_analytics.aggregate,
                                          password_analytics.count)

        # Calculating the t statistic
        t_stat = TTests.t_statistic(
            population_mean=population_mean,
            sample_mean=sample_stats.data_list_mean,
            sample_std_deviation=sample_stats.data_list_standard_dev,
            sample_length=sample_stats.data_list_len_f)

        # Calculating the t distribution
        t_dist_min, t_dist_max = TTests.t_distribution(
            sample_length=sample_stats.data_list_len_f, alpha=0.01)

        print(t_stat, t_dist_min, t_dist_max)

        if t_stat < t_dist_min or t_stat > t_dist_max:
            return Response(code=400, message='Intrusion Detected')
        else:
            password_analytics.update_analytics(
                sample_stats.data_list_sum, int(sample_stats.data_list_len_f))
            return Response(code=200, message='OK')
コード例 #2
0
    def register(cls, username, fname, lname, password, timestamp_array1,
                 timestamp_array2, timestamp_array3):

        time_array1 = []
        for i in range(len(timestamp_array1) - 1):
            time_array1.append(
                float(timestamp_array1[i + 1] - timestamp_array1[i]) /
                float(1000))

        time_array2 = []
        for i in range(len(timestamp_array2) - 1):
            time_array2.append(
                float(timestamp_array2[i + 1] - timestamp_array2[i]) /
                float(1000))

        time_array3 = []
        for i in range(len(timestamp_array3) - 1):
            time_array3.append(
                float(timestamp_array3[i + 1] - timestamp_array3[i]) /
                float(1000))

        print(time_array1, time_array2, time_array3)
        # Create user
        User.insert_into_user(username=username, fname=fname, lname=lname)

        # Fetch user
        user = User.fetch_by_username(username=username)

        # Add new password
        Password.insert_into_passwords(userid=user.id, password=password)

        # Fetch the password
        password = Password.fetch_by_userid(userid=user.id, password=password)

        array1_sum = Statistics.sum(time_array1)
        array2_sum = Statistics.sum(time_array2)
        array3_sum = Statistics.sum(time_array3)
        total_sum = array1_sum + array2_sum + array3_sum
        total_lens = len(time_array1) + len(time_array2) + len(time_array3)

        # Insert password analytics
        PasswordAnalytics.insert_into_password_analytics(
            password_id=password.id, aggregate=total_sum, count=total_lens)

        return Response(code=200, message='OK')