diff --git a/cmd/neofs-adm/internal/modules/morph/generate.go b/cmd/neofs-adm/internal/modules/morph/generate.go
index 0bc0a19bd..56b2efc22 100644
--- a/cmd/neofs-adm/internal/modules/morph/generate.go
+++ b/cmd/neofs-adm/internal/modules/morph/generate.go
@@ -1,6 +1,7 @@
 package morph
 
 import (
+	"errors"
 	"fmt"
 	"path"
 
@@ -19,6 +20,9 @@ func generateAlphabetCreds(cmd *cobra.Command, args []string) error {
 	if err != nil {
 		return err
 	}
+	if size == 0 {
+		return errors.New("size must be > 0")
+	}
 
 	walletDir := viper.GetString(alphabetWalletsFlag)
 	pwds, err := initializeWallets(walletDir, int(size))
diff --git a/cmd/neofs-adm/internal/modules/morph/generate_test.go b/cmd/neofs-adm/internal/modules/morph/generate_test.go
index dbfcda2cd..774415f68 100644
--- a/cmd/neofs-adm/internal/modules/morph/generate_test.go
+++ b/cmd/neofs-adm/internal/modules/morph/generate_test.go
@@ -27,6 +27,13 @@ func TestGenerateAlphabet(t *testing.T) {
 	cmd := generateAlphabetCmd
 	v := viper.GetViper()
 
+	t.Run("zero size", func(t *testing.T) {
+		buf.Reset()
+		v.Set(alphabetWalletsFlag, walletDir)
+		require.NoError(t, cmd.Flags().Set(alphabetSizeFlag, "0"))
+		buf.WriteString("pass\r")
+		require.Error(t, generateAlphabetCreds(cmd, nil))
+	})
 	t.Run("no password provided", func(t *testing.T) {
 		buf.Reset()
 		v.Set(alphabetWalletsFlag, walletDir)